1

Neo4jのクエリパラメータから検索を作成しようとしていますが、ワイルドカードの識別に問題があるようです。「*」は、ノード属性のワイルドカードでは機能しません。

私が持っているコードは以下の通りです:

price = "*" # by default
query = 'start b = product("*:*") WHERE has(b.public) and (b.public = 1) and (b.price = %d) RETURN ID(b) SKIP %d LIMIT %d;' % (price, skip, limit)
cypher.execute(cdb,query)[0]

残念ながら、クエリを実行したり、コンソールに切り替えたりすると...

start b = product("*:*") WHERE has(b.public) and (b.public = 1) and (b.price = "*") RETURN ID(b) SKIP 0 LIMIT 10;

...ワイルドカード文字のように、価格が何かに一致するのではなく、文字通り「*」に一致しようとしているように、null値を取得します。priceたとえば、変数を0に置き換えると、すべて問題ありません。

これは私が次のようなことを言うことができることを示唆しているので、私は完全には理解していません:

WHERE follower.name =~ 'S.*'

「*」は、count(*)とnode:indexes( "*:*")の両方のワイルドカードとして機能します。

違いがあれば、Pythonとpy2neoを使用しています。

4

1 に答える 1

2

ドキュメントによると、の意味はcount(*)一致する行の数を数えることです。MATCHただし、一致とは、ワイルドカードの一致ではなく、句によって返される行を意味することを忘れないでください。したがって、"*"ここでは通常のワイルドカードではありません。

そしてnode:indexes("*:*")最初の「*」は(インデックスの)「すべてのキー」を意味します。"i*"「文字「i」で始まるすべてのキー」という意味で言うことはできません。

2番目の「*」はすべてのインデックス値を意味します。"foo*"ただし、ここでは、「'foo'で始まるすべての値」を意味すると言うこともできます。

最後に"WHERE follower.name =~ 'S.*'"正規表現の一致です。

"price"あなたのケースが機能するためには、製品インデックスに名前が付けられたキーが存在する必要があります。次に、を使用できます"price:whatever"

于 2012-12-30T11:02:32.143 に答える