首页 > 解决方案 > 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:字段不能为空

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

标签: neo4jlucenefull-text-searchfuzzy-searchneo4j-apoc

解决方案


您可以使用 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

推荐阅读