Neo4j Lucene запрос синтаксиса для многословных автозаполненных нечетких полнотекстового поиска - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь реализовать запрос 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 голосов
/ 08 декабря 2018

Вы можете использовать язык Luchene для поиска:

CALL apoc.index.nodes ('Company', 'name: Ne * AND сотрудников: Ma *')

https://neo4j -contrib.github.io / neo4j-apoc-процедуры / # _ 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
...