neo4j - Neo4j Lucene 多词自动提示模糊全文搜索的查询语法
问题描述
我正在尝试为多词自动提示全文搜索实现 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:字段不能为空
如何正确构建多词搜索词?
解决方案
您可以使用 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