Frage

Ich verwende Titan 0.4.0 und versuche, die neueste Version zu verwenden REGEX Operator für die ES-Stringsuche.

Ich habe einen Index erstellt my_key für meinen ES-Index mit dem Namen search.

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

Dann füge ich einen Scheitelpunkt hinzu:

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

Der REGEX scheint zu funktionieren...

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

...aber nur auf meinem tokenisierten "123" Und "abc" unabhängig:

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

Wenn ich jedoch versuche, einen regulären Ausdruck auszuführen, der meinem vollständigen Wert entspricht, wird mein Scheitelpunkt nicht abgerufen (keines der folgenden Ergebnisse wird zurückgegeben):

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

Gibt es in Titan eine Möglichkeit, den Index auf diese Weise abzufragen (Regex ohne tokenisierte/analysierte Begriffe)?

War es hilfreich?

Lösung

Die Art und Weise, wie dies in Titan bis 0.4.0 gehandhabt wurde, kann etwas verwirrend sein, da Zeichenfolgen immer tokenisiert werden, wenn sie in einem externen Indexierungs-Backend indiziert werden.Dies führt dazu, dass Zeichenfolgen in Wörter „zerteilt“ werden und Nicht-Buchstaben-Zeichen (sowie Stoppwörter) ignoriert werden.

In der kommenden Version Titan 0.4.1 machen wir dies noch deutlicher.Schauen Sie sich die aktualisierte Dokumentation an:https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

Das Wesentliche:Sie können jetzt angeben, ob Ihre Zeichenfolgen „wie sie sind“ oder nach der Analyse als Wortbeutel indiziert werden sollen.Für Ihren Anwendungsfall wäre es ersteres.Wir haben auch die Terminologie bereinigt:Wenn Sie nach Wörtern in einer Zeichenfolge suchen, die einem regulären Ausdruck entsprechen, wird das Prädikat Text.CONTAINS_REGEX verwendet.Wenn Sie möchten, dass die gesamte Zeichenfolge mit einem Ausdruck übereinstimmt, verwenden Sie Text.REGEX.

Titan 0.4.1 befindet sich derzeit in der finalen Vorschau und wird nächste Woche veröffentlicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top