neo4j полнотекстовый индексный поиск по специальным символам

#neo4j #cypher #fulltext-index

#neo4j #cypher #полнотекстовый индекс

Вопрос:

Мы используем neo4j версии 4.1.1, и у нас есть график, который представляет структуру объектов.
мы поддерживаем перевод с использованием узлов для перевода, а связь между объектом и узлом перевода — это имя и описание объекта.
например:
(n:object)-[r:Translation]-(:ru)
означает, что в отношении r есть имя и описание объекта n на русском языке.
Для поиска по имени и описанию мы реализовали полнотекстовый индекс, подобный этому:
CALL db.index.fulltext.createRelationshipIndex("TranslationRelationshipIndex",["Translation"],["Name","Description"], { eventually_consistent: "true" })
Мы также поддерживаем поиск элементов, для этого мы используем индекс для запроса, и у нас есть такие имена, как «UFO41.SI01V03»:
CALL db.index.fulltext.queryRelationships('TranslationRelationshipIndex', '*FO41.SI0*') YIELD relationship, score 

но для имен, как показано выше ([0-9.*]), результаты не
возвращаются, в то время как результаты возвращаются для имени типа «ab.или»

Есть ли кто-нибудь, кто знает, как заставить это работать? Я перепробовал все 46 доступных анализаторов. Я знаю, что мы можем решить эту проблему, просто используя match()-[r]-() where r.Name contains "<string>" , но мы предпочитаем более эффективное решение этой проблемы с использованием индекса.

будьте в безопасности! и заранее спасибо.

p.s при необходимости я могу предоставить несколько строк, чтобы воссоздать его локально, просто спросите.

Ответ №1:

Анализатор, вероятно, распознает слова, подобные ab.or differently than ab.or123 , и считает их одним токеном в первом случае и двумя токенами во втором случае.

Нет анализатора, который действительно соответствовал бы вашим потребностям, кроме как создать свой собственный.

Однако вы можете заменить . в своем запросе простым AND , например :

 CALL db.index.fulltext.queryNodes('Test', replace("*FO41.SI0*", ".", " AND "))
 

Вернет вам результаты, которые вы просматриваете.


Ресурсы для создания собственного анализатора :

https://graphaware.com/neo4j/2019/09/06/custom-fulltext-analyzer.html

https://neo4j.com/docs/java-reference/current/extending-neo4j/full-text-analyzer-provider/