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

Neo4j Lucene query syntax for multi-word autosuggest fuzzy fulltext search

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

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

现在我可以一个词模糊搜索了:

Name.primaryName:Shwarzengger~

哪个returns:

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: Failed to invoke procedure apoc.index.nodes: Caused by: java.lang.NullPointerException: field must not be null

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

您可以使用 Luchene 语言搜索:

CALL apoc.index.nodes('Company','name:Ne* AND employees: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