我正在尝试从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;
...我得到空值,好像价格试图字面上匹配“*”而不是匹配任何东西,就像通配符一样。例如,当我将变量price
替换为0时,一切都很好。
我不太明白,因为this建议我可以这样说:
WHERE follower.name =~ 'S.*'
并且“*”用作count(*)和node:indexes(“*:*”)
的通配符如果有任何不同,我正在使用python和py2neo。
答案 0 :(得分:2)
根据docs,count(*)
的含义是计算匹配行的数量。但请记住,匹配是指MATCH
子句返回的行,而不是通配符匹配。所以"*"
不是普通的通配符。
在node:indexes("*:*")
中,第一个“*”表示“所有键”(索引)。你不能说"i*"
的意思是“以字母'i'开头的所有键。”
第二个“*”表示所有索引值。但在这里,您也可以说"foo*"
,意思是“所有值都以'foo'开头”。
最后,"WHERE follower.name =~ 'S.*'"
是正则表达式匹配。
为了使您的案例有效,产品索引上应该存在名为"price"
的密钥。然后你可以使用"price:whatever"
。