Domanda

Sto eseguendo Titan 0.4.0 e sto cercando di utilizzare l'ultimo operatore REGEX per la ricerca della stringa ES.

Ho creato un indice su my_key per il mio indice ES denominato search.

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

Allora aggiungo un vertice:

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

Il REGEX sembra funzionare ...

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

... ma solo sul mio "123" tokenizzato e "abc" in modo indipendente:

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

Tuttavia, se tento di eseguire un'espressione regolare che corrisponda al mio valore completo, il mio vertice non è recuperato (nessuno dei seguenti risultati di ritorno):

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()
.

C'è un modo in Titan per interrogare l'indice in questo modo (regex w / o termini tokenized / analizzato)?

È stato utile?

Soluzione

Il modo in cui ciò è stato gestito in Titan fino a 0.4.0 può essere un po 'confuso, perché le stringhe sono sempre tokenizzate quando sono indicizzate in un backend di indicizzazione esterno. Ciò porta a stringhe che è "grossa" in parole un personaggio non lettera (così come le parole di arresto) che viene ignorato.

Nel rilascio di imminente Titan 0.4.1 stiamo rendendo questo più esplicito. Dai un'occhiata alla documentazione aggiornata: https://github.com/thinkaurelius/titan/wiki/full -Text-and-string-search

The Gist: ora puoi specificare se vuoi che le tue stringhe indicizzate "AS-IS" o come un sacchetto di parole dopo l'analisi. Per il tuo caso d'uso, sarebbe il primo. Abbiamo anche raddrizzato la terminologia: se stai cercando parole in una stringa che corrispondono ad un'espressione regolare, viene utilizzato il testo predicato.Contains_regex. Se si desidera che l'intera stringa abbinasse un'espressione, utilizzare text.regex.

Titan 0.4.1 è attualmente in anteprima finale e verrà rilasciato la prossima settimana.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top