На самом деле это скорее вопрос Lucene, но это в контексте базы данных neo4j.
У меня есть база данных, которая поделена на около 50 типов узлов (например, «коллекции» или «таблицы»).в других типах БД).У каждого есть подмножество свойств, которые необходимо проиндексировать, некоторые имеют одно и то же имя, некоторые - нет.
При поиске я всегда хочу найти узлы определенного типа, а не по всем узлам.
Я вижу три способа организации этого:
Один индекс для каждого типа, свойства естественным образом отображаются в индексные поля: index 'foo', 'id'='1234'
.
Один глобальный индекс, каждое поле сопоставляется с именем свойства, чтобы различать тип, либо включать его как часть значения ('id'='foo:1234'
), либо проверять узлы после их возвращения (я ожидаюдубликаты встречаются очень редко).
Один тип индекса является частью имени поля: 'foo.id'='1234'
.
После создания,база данных доступна только для чтения.
Есть ли какие-либо преимущества для одного из них с точки зрения удобства, эффективности размера / кэша или производительности?
Насколько я понимаю, для первого вариантаneo4j создаст отдельный физический индекс для каждого типа, который кажется неоптимальным.В-третьих, я получаю в большинстве документов по lucene только небольшое подмножество полей, не уверенный, влияет ли это на что-либо.