2

数値比較演算子(>=、<=、<、>、...)を使用してNeo4jで手動インデックスを検索する方法はありますか? Gremlin インデックスの例を見ると、それらはすべて、特定のプロパティ値で検索を提示する傾向があります。

最初の double と 2 番目の int で、「プロパティ」と呼ばれるプロパティに数値を持つ 2 つのタイプの関係が約 10M あるとします。

gremlin> g.e(123).getProperty('property')
==> 1.57479276459179

ここで、double 型のログベースの pvalue である正確なプロパティ値を知っていれば、ノードを簡単に見つけることができます。

gremlin> g.idx('index_e_ASSOC').get('property', 1.57479276459179)
==> e[2421730][31493-ASSOCIATION->53378]
==> e[4885094][53378-ASSOCIATION->31493]
==> e[866409][37891-ASSOCIATION->6292]
==> e[123][6292-ASSOCIATION->37891]

代わりに、「プロパティ」の範囲検索を行いたいので、たとえば、「プロパティ」 >= 0 && 「プロパティ」 <= 1.6 のすべてのエッジを見つけます。これはGremlinでできることですか?Gremlin ユーザーのディスカッション グループを見ると、フルテキストの Lucene インデックスからのワイルドカード検索でさえちょっとしたハックであり、Neo4j APIは役に立たないことがわかります。

編集: Stackoverflow でこのような別の質問を見つけました (「Lucene クエリ構文を使用した Neo4j の範囲クエリ」というタイトル。新規ユーザーは最大 2 つのハイパーリンクしか投稿できません)。これは、Neo4j ドキュメントにつながります。数値に ValueContext を使用してインデックスを再作成しました。neo4jディスカッショングループ(タイトル:numericRangeクエリと関係クエリを組み合わせる)で見つかった例に従うことで、次のようなクエリを実行できます

start a=node(123)
match a-[rel]-(b)
where type(rel) = "ASSOCIATION" AND rel.`property` > 1.0 AND rel.`property` < 2.0
RETURN b
LIMIT 20;

範囲検索を使用します。Gremlin の構文は何ですか? それは次のようなものでなければなりません

g.idx('index_e_ASSOC')[[property: Neo4jTokens.QUERY_HEADER + "[1.0 TO 2.0]"]].count()

これは構文的に正しいですが、その範囲内にプロパティを持つエッジがある場合でも、 count は 0 の結果をもたらします。

4

2 に答える 2

2

すべてのエッジで Gremlin フィルター ステップを使用できますが、これはテーブル スキャンを行います。

g.E.filter{it.property >= 0 && it.property <= 1.6}

https://github.com/tinkerpop/gremlin/wiki/Gremlin-Stepsを参照してください

indexindex_e_ASSOCにすべてのエッジのサブセットが含まれている場合、ワイルドカード クエリを使用して範囲を絞り込むことができます。

start = g.idx('index_e_ASSOC')[['property': Neo4jTokens.QUERY_HEADER + "*"]]
start.filter{it.property >= 0 && it.property <= 1.6}

Neo4jTokens.QUERY_HEADER解決される"%query%"ので、次のように書くこともできます。

start = g.idx('index_e_ASSOC')[['property': "%query%" + "*"]]
start.filter{it.property >= 0 && it.property <= 1.6}
于 2012-07-15T17:47:01.550 に答える
0

おそらく、 http: //docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-send-an-arbitrary-groovy-script- のように、Groovy を介して Neo4j API を使用することをお勧めします。-ルセンソーティング?

于 2012-07-09T12:41:47.000 に答える