数値比較演算子(>=、<=、<、>、...)を使用して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 の結果をもたらします。