NEO4J - Лучшие практики для хранения 40 миллионов текстовых узлов - PullRequest
0 голосов
/ 08 октября 2018

Я пользуюсь Neo4j уже несколько недель и думаю, что это круто.

Я создаю приложение NLP, и в основном я использую Neo4j для хранения графа зависимостей, сгенерированного семантическим парсером, что-то вроде этого:

https://explosion.ai/demos/displacy?text=Hi%20dear%2C%20what%20is%20your%20name%3F&model=en_core_web_sm&cpu=1&cph=0

В узлах я храню отдельные слова, содержащиеся в предложениях, и связываю их через отношения с рядом различных типов.

Для моего приложения мне необходимо найти все узлы, которые содержатданное слово, поэтому в основном я должен искать по всем узлам, находя те, которые содержат входное слово.Конечно, я уже создал индекс для текстового поля слова.

Я работаю над очень большим набором данных:

На моем ноутбуке следующий запрос занимает около 20 мс:

 MATCH (t:token) WHERE t.text="avoid" RETURN t.text

Вот подробные сведения о графе graph.db:

47.108.544 узлов

45.442.034 отношений

13.39 ГиБ дБ размер

Индекс, созданный в поле token.text

PROFILE MATCH (t:token) WHERE t.text="switch" RETURN t.text

------------------------
NodeIndexSeek
251,679 db hits
---------------
Projection
251,678 db hits
--------------
ProduceResults
251,678 db hits 
---------------

Интересно, я что-то не так делаю при индексации такого количества узлов.В настоящий момент я создаю новый узел для каждого слова, с которым я сталкиваюсь в тексте, даже если текст совпадает с другими узлами.

Должен ли я создавать новый узел только при обнаружении нового слова, управляяпредложение строится на основе отношений?

Не могли бы вы помочь мне с предложением или наилучшей практикой для этого конкретного случая?

Большое спасибо

1 Ответ

0 голосов
/ 08 октября 2018

В этом случае каждый из ваших узлов: Token должен быть уникальным.Когда вы создаете их, вы должны использовать MERGE вместо CREATE для самого узла, поэтому, если узел уже существует, он будет использовать существующий, а не создавать новый.

Может также помочь добавить уникальныйограничение для этого после того, как вы очистили свои данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...