При использовании Neo4j с Cypher я никогда не задумывался о свойствах, думая о том, что индексы могут существовать независимо от меток.
Без метки
MATCH (n {displayName:"Macroautophagy"} ) RETURN n;
С меткой
MATCH (n:Pathway {displayName:"Macroautophagy"}) RETURN n;
до тех пор, пока я не преобразовал некоторую Java, которая использовала смешанный Core API и Cypher, в чистый Core API.
Основная причина заключалась в том, что мои тестовые базы данных были небольшими, и запросы выполнялись вПримерно в то же время, но для большой базы данных разница во времени выполнения между ними составляет несколько минут или более.
Когда я пошел преобразовать запрос, основанный только на значении свойстваЯ искал Core API. Я только нашел findNode
или findNodes
, где для каждого из них требовался параметр label
, а затем я начал думать о том, как Neo4j выполняет первый запрос без метки.
При чтении документации для индексов было отмечено,
Cypher позволяет создавать индексы для одного или нескольких свойств для всех узлов, имеющих данную метку:
Индекс, который создается на основе одного свойства для любой данной метки, называется индексом с одним свойством.
Индекс, который создается на нескольких свойствах для любой данной метки, называется составным индексом.
Хотя я совершенно уверен, что теперь я понимаю это, будучи новичком в использовании Neo4j с Java API, я не хочу что-то упустить.
Если использовать Neo4j Core API в Javaдля поиска узла со свойством и без заданной метки, тогда единственный способ найти узел (ы) - это полное сканирование всех узлов, ищущих свойство?
Если ответНет, тогда ответ должен включать пример, показывающий более быстрый способ использования Neo4j Core API в Java.Как я уже отмечал, он прекрасно работал как запрос Cypher, вызываемый в Java, поэтому примеры Cypher не будут приняты.
Если ответ положительный, тогда я должен попросить некоторую вспомогательную документацию Neo4j помимо того, что я отметил,Причина в том, что любой может сказать «да», и я не могу подтвердить это на примере кодирования.
Пища для размышлений.
Полагаю, причина, по которой я никогда не думал об индексах, требующих метки, состоит в том, что во всех чтениях о графовых базах данных они подчеркивают, что данные не хранятся в виде таблиц, а когда вы думаете об индексах в реляционной базе данных, вы думаете об индексахидти с таблицами.Когда вы отказываетесь от представления данных, а не от таблиц, по умолчанию идея индексов, привязанных к таблицам, приходит на попечение и не привязывается ни к чему, кроме значений, как я думал, но, очевидно, чем больше вы узнаете, в этом случае,тем более он остается прежним.