使用Cypher 2.0将Lucene查询传递给Neo4j REST API

时间:2014-03-12 18:20:55

标签: lucene neo4j cypher

如果我有一个Lucene查询,例如(title:"foo bar" AND body:baz*) OR title:bat,是否有任何直接的方法将其传递给Cypher查询?看起来这种情况曾经与START和旧node_auto_index一起使用,但我不确定如何正确使用Cypher 2.0。

我已经尝试将其粘贴在MATCH子句中但我得到了无效的语法错误:

MATCH (item:Item {...})
RETURN item

我即将编写一个将Lucene查询转换为参数化Cypher查询的解析器,但我想我会先检查是否有更简单的方法。

1 个答案:

答案 0 :(得分:2)

您是正确的,您只能在START中使用Lucene查询。有两种方法可以查询您的数据。第一个是使用MATCH的2.0语法,但没有Lucene支持。标签索引尚不支持通配符搜索,但它应包含在将来的版本中。你必须使用正则表达式来搜索通配符。因此,使用以下查询的性能可能不适合您的需求。

MATCH (item:Item)
WHERE (item.title = "foo bar" AND item.body =~ "ba.*") OR item.title = "bat"
RETURN item

确保您的属性已编入索引(=标签索引,而不是lucene索引):

CREATE INDEX ON :Item(title); 
CREATE INDEX ON :Item(body);

如果您仍想使用legacy indexing with Lucene,您的查询将类似于:

START item=node:node_auto_index("(title:'foo bar' AND body:baz*) OR title:'bat'")
RETURN item