Neo4j - Как использовать createRelationshipIndex / createNodeIndex в полнотекстовом поиске - PullRequest
0 голосов
/ 29 октября 2019

Итак, я понимаю, что в Neo4j 3.5 и выше реализован полнотекстовый поиск в шифровом запросе через createNodeIndex(), например:

CALL db.index.fulltext.createNodeIndex("myIndex", ["PersonNode"], ["name"])

, где myIndex - произвольная переменная, которую я создаю для хранения индекса, PersonNode - это имя моей метки узла, а name - это один из атрибутов PersonNode, где я хочу выполнить полнотекстовый поиск.

И фактически выполнить поиск по name, Я могу сделать что-то вроде следующего:

CALL db.index.fulltext.queryNodes("myIndex", "Charlie")

Но теперь предположим, что PersonNode имеет отношение типа PURCHASED_ITEM, которое связано с другой меткой узла ProductNode следующим образом:

PersonNode-[:PURCHASED_ITEM]->ProductNode

И, кроме того, предположим, что ProductNode имеет атрибут с именем productTitle, указывающий название отображаемого заголовка для каждого продукта.

У меня вопрос, я хотел бы настроить индекс для этогоотношения (используя, предположительно, createRelationshipIndex()), и выполните полнотекстовый поиск по productTitle и верните список всех PersonNode, которые приобрели данный продукт. Как я могу это сделать?

Приложение: Я понимаю, что вышеупомянутое можно сделать, сначала получив список всех ProductNode экземпляров, соответствующих данному заголовку, а затем выполнив обычный запрос шифра для извлечения всехсвязанные PersonNode экземпляры. Я также понимаю, что для приведенного выше примера нормальный запрос шифров - это все, что мне нужно. Но причина, по которой я задаю этот вопрос, заключается в том, что мне в конечном итоге необходимо реализовать единую панель поиска, которая позволила бы пользователю вводить любой текст, включая возможные орфографические ошибки и все, и позволила бы ему выполнять поиск по нескольким атрибутам и / или взаимосвязямPersonNode, и результаты должны быть отсортированы по какому-либо показателю релевантности. И для этого мне нужно сначала понять, как именно работают запросы отношений в neo4j.

1 Ответ

0 голосов
/ 29 октября 2019

Вот пример того, как создать полнотекстовый индекс для свойства productTitle отношений PURCHASED_ITEM:

CALL db.index.fulltext.createRelationshipIndex("myRelIndex", ["PURCHASED_ITEM"], ["productTitle"])

А вот фрагмент, показывающий использование этого индекса:

CALL db.index.fulltext.queryRelationships("myRelIndex", "Hula Hoop") YIELD relationship, score
...
...