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;

...我得到空值,就好像价格试图从字面上匹配“*”而不是匹配任何东西,就像通配符一样。例如,当我用 0 替换变量price时,一切都很好。

我不太明白,因为表明我可以这样说:

WHERE follower.name =~ 'S.*'

并且 "*" 作为 count(*) 和 node:indexes("*:*") 的通配符

如果这有什么不同,我正在使用 python 和 py2neo。

4

1 回答 1

2

根据文档, 的含义count(*)是计算匹配行的数量。但请记住,匹配是指MATCH子句返回的行,而不是通配符匹配。所以"*"这里不是普通的通配符。

node:indexes("*:*")第一个“*”中表示“所有键”(索引的)。您不能说"i*"“所有以字母'i'开头的键”。

第二个“*”表示所有索引值。但在这里,您也可以说"foo*",意思是“所有以 'foo' 开头的值”。

最后,"WHERE follower.name =~ 'S.*'"是一个正则表达式匹配。

"price"为了使您的案例有效,产品索引上应该存在一个名为的键。然后你可以使用"price:whatever".

于 2012-12-30T11:02:32.143 回答