用于多词自动建议模糊全文搜索的 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
我正在尝试为多词自动建议全文搜索实现 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