Итак, я понимаю, что в 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.