Neo4j Lucene查询语法,用于多词自动建议模糊全文搜索

时间:2018-12-08 06:56:30

标签: neo4j lucene full-text-search fuzzy-search neo4j-apoc

我正在尝试为多词自动建议全文搜索实现Lucene查询。

例如,我希望能够在数据库中搜索Arnold Schwarzenegger

现在我可以用一个词进行模糊搜索:

Name.primaryName:Shwarzengger~

返回:

Arnold Schwarzenegger
Katherine Schwarzenegger
Patrick Schwarzenegger
Christian Schwarzenegger
Aurelia Schwarzenegger
Patrick M. Knapp Schwarzenegger
Brian Schwarzenegger
Christina Schwarzenegger

但是对于多词术语该如何做?

例如以下查询:

Name.primaryName:arn Shwarzengger~

无法使用以下错误:

  

Neo.ClientError.Procedure.ProcedureCallFailed:无法调用   过程apoc.index.nodes:由以下原因引起:   java.lang.NullPointerException:字段不能为空

如何正确构建多词搜索词?

1 个答案:

答案 0 :(得分:1)

您可以使用Luchene语言进行搜索:

  

致电apoc.index.nodes('公司','名称:Ne * AND雇员:Ma *')

     

https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_add_document_to_index

例如,破坏初始查询并构造一个模糊查询:

WITH "arnold schwarzenegger" AS queryString
WITH split(queryString, " ") AS terms,
     "primaryName" AS key
WITH REDUCE(
       acc = "", 
       i IN range(0, size(terms) - 2) | 
       acc + key + ":" + terms[i] + " OR "
     ) + key + ":" + terms[size(terms) - 1] 
     AS query
CALL apoc.index.nodes('Node', query) YIELD node
RETURN node