【问题标题】:Passing a Lucene query to Neo4j REST API using Cypher 2.0使用 Cypher 2.0 将 Lucene 查询传递给 Neo4j REST API
【发布时间】:2014-04-17 02:48:22
【问题描述】:

如果我有一个 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 查询,但我想我会先检查一下是否有更简单的方法。

【问题讨论】:

    标签: lucene neo4j cypher


    【解决方案1】:

    您是正确的,您只能将 Lucene 查询与 START 一起使用。有两种方法可以查询您的数据。第一个是使用带有 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
    

    【讨论】:

    • 谢谢。知道何时支持使用标签索引的通配符搜索?如果很快会添加支持,我宁愿不必创建二级索引。
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多