Question

J'utilise Titan 0.4.0 et j'essaie d'utiliser la dernière version REGEX opérateur pour la recherche de chaîne ES.

J'ai créé un index sur my_key pour mon index ES nommé search.

gremlin> g.makeKey("my_key").dataType(String.class).indexed("search",Vertex.class).single().make()
==>v[82]

Ensuite j'ajoute un sommet :

gremlin> v = g.addVertex(null, ["my_key":"123-abc"])
==>v[8]
gremlin> v.map
==>{my_key=123-abc}

Le REGEX ça a l'air de fonctionner...

gremlin> g.query().has("my_key", REGEX, "[12]{2}3").vertices()
==>v[8]

...mais seulement sur mon token "123" et "abc" indépendamment:

gremlin> g.query().has("my_key", REGEX, "123").vertices()
==>v[8]
gremlin> g.query().has("my_key", REGEX, "abc").vertices()
==>v[8]

Cependant, si j'essaie d'exécuter une expression régulière qui correspond à ma valeur complète, mon sommet n'est pas récupéré (aucun des résultats ci-dessous ne renvoie) :

gremlin> g.query().has("my_key", REGEX, "123-abc").vertices()
gremlin> g.query().has("my_key", REGEX, "123.abc").vertices()
gremlin> g.query().has("my_key", REGEX, "[0-9]+.[abc]{3}").vertices()
gremlin> g.query().has("my_key", REGEX, "123.").vertices()

Existe-t-il un moyen dans Titan d'interroger l'index de cette manière (regex sans termes tokenisés/analysés) ?

Était-ce utile?

La solution

La façon dont cela était géré dans Titan jusqu'à la version 0.4.0 peut être un peu déroutante, car les chaînes sont toujours tokenisées lorsqu'elles sont indexées dans un backend d'indexation externe.Cela conduit à ce que les chaînes soient "découpées" en mots et que les caractères autres que des lettres (ainsi que les mots vides) soient ignorés.

Dans la prochaine version de Titan 0.4.1, nous rendons cela plus explicite.Jetez un œil à la documentation mise à jour :https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

L'essentiel:Vous pouvez maintenant spécifier si vous souhaitez que vos chaînes soient indexées « telles quelles » ou sous forme de sac de mots après analyse.Pour votre cas d'utilisation, ce serait le premier.Nous avons également clarifié la terminologie :Si vous recherchez des mots dans une chaîne correspondant à une expression régulière, le prédicat Text.CONTAINS_REGEX est utilisé.Si vous souhaitez que la chaîne entière corresponde à une expression, utilisez Text.REGEX.

Titan 0.4.1 est actuellement en avant-première finale et sera publié la semaine prochaine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top