1

Titan 0.4.0 を実行してREGEXおり、ES 文字列検索に最新の演算子を使用しようとしています。

my_keyという名前の ES インデックスのインデックスを作成しましたsearch

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

次に、頂点を追加します。

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

動作するREGEXようです...

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

...しかし、トークン化さ"123""abc"た独立したもののみ:

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

ただし、完全な値に一致する正規表現を実行しようとすると、頂点が取得されません (以下のいずれも結果を返しません)。

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

Titan でこの方法でインデックスをクエリする方法はありますか (トークン化/分析された用語のない正規表現)?

4

1 に答える 1

2

これが 0.4.0 までの Titan で処理された方法は、少し混乱する可能性があります。文字列は、外部のインデックス バックエンドでインデックスが作成されるときに常にトークン化されるためです。これにより、文字列が単語に「チャンク」され、文字以外の文字 (およびストップ ワード) が無視されます。

今後の Titan 0.4.1 リリースでは、これをより明確にします。更新されたドキュメントをご覧ください: https://github.com/thinkaurelius/titan/wiki/Full-Text-and-String-Search

要点: 文字列を「そのまま」索引付けするか、分析後に単語のバッグとして索引付けするかを指定できるようになりました。あなたのユースケースでは、前者になります。用語も整理しました。正規表現に一致する文字列内の単語を検索する場合は、述語 Text.CONTAINS_REGEX が使用されます。文字列全体を式に一致させたい場合は、Text.REGEX を使用します。

Titan 0.4.1 は現在最終プレビュー中で、来週リリースされる予定です。

于 2013-11-19T19:45:44.357 に答える