2

Tinkerpop API は、titan からデータを取得する際に混合 Elasticsearch インデックスを使用しません。ただし、titan API を直接使用すると、混合 Elasticsearch インデックスが使用されます。

たとえば、名前に混合インデックスを作成しました。

tinkerpop API を使用するgraph.iterator().V().has("name", "Apple")と、"name" に混合インデックスが使用されず、警告ログに「Query requires iterating over all vertices」が表示されます。

titan API を使用すると、正常に動作し、以下に示すように「名前」に混合インデックスを使用します

titanGraph.query().has("name", "Apple").vertices()

この理由は何ですか?

4

2 に答える 2

2

これは、 TinkerPop メーリング リストにクロスポストされたものです。

まず、正確な文字列の一致を行う場合は、複合インデックスでうまくいくようです。

第 20 章「インデックス パラメータと全文検索」のTitan ドキュメントを確認してください。マッピング パラメーターを指定しない場合addKey(name)、文字列キーの混合インデックスは、デフォルトで全文検索 -- になりaddKey(name, Mapping.TEXT.asParameter())ます。ドキュメントには、全文検索で考慮すべき多くの落とし穴がリストされています。

  • 文字列は単語のバッグにトークン化され、ユーザーは 1 つまたは複数の単語を含むすべての一致を効率的にクエリできます。
  • Titan のデフォルトのトークン化では、英数字以外の文字で文字列を分割し、2 文字未満のトークンをすべて削除します。
  • インデックス バックエンドによるグラフ クエリでは、全文検索の述語のみがサポートされます。[ textContains, textContainsPrefix, textContainsRegex]
  • 全文検索では大文字と小文字が区別されません。

あなたのクエリは等号比較を行おうとしているので、おそらくMapping.STRINGorMapping.TEXTSTRINGの方が適切でしょう。

さまざまなバージョンを比較するために、いくつかの要点を作成しました。これらの例をコピーして Gremlin コンソールに貼り付けることができます。

タイタン 0.5.4 https://gist.github.com/pluradj/ff1e1b1bcea0753adbb1

タイタン 1.0.0 https://gist.github.com/pluradj/9bf96f8eae9fa24f3d61

この動作は Titan 0.5.4 と 1.0.0 の間で変わっていないことに注意してください。

于 2016-03-07T18:10:21.943 に答える