Я заглядываю в обычного клиента neo4j (https://github.com/jadell/neo4jphp/wiki)
Выглядит очень перспективно и удобно в использовании. Однако я немного запутался по поводу индексов. Я знаю, что в Neo4j вы можете добавить индекс:
CREATE INDEX ON :Person(name)
Как я правильно помню, это автоматически индексировало бы все узлы Person по имени.
В клиентской библиотеке Everyman раздел по индексам показывает, что вы можете создавать и добавлять индексы к узлам, например:
$shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships');
(PS: Что именно делает эта строка выше?)
$heartOfGold = $client->makeNode()
->setProperty('propulsion', 'infinite improbability drive')
->save();
// Index the ship on one of its properties
$shipIndex->add($heartOfGold, 'propulsion', $heartOfGold->getProperty('propulsion'));
Теперь мой вопрос. Когда я должен вручную добавить индексы в мой PHP-код, как в примере выше, и когда я должен добавить индекс в свою базу данных Neo4j и рассчитывать на автоматическую индексацию?
И в последнем случае, я могу также использовать поиск по индексу в коде, как это:
$match = $shipIndex->findOne('captain', 'Zaphod');
?
Вышеупомянутые первые методы добавляют узел и его свойство движения к индексу люцена. Не то чтобы этот вид индекса был помечен как устаревший с некоторых пор.
Схемы индексов теперь работают следующим образом:
Вы создаете индекс для комбинации метка / свойство, например, если вы знаете, что вам нужно будет найти пользователей по их свойству входа в систему, обычно рекомендуется добавить индекс для быстрого поиска:
CREATE INDEX ON :User(login);
Этот вид индекса, так как neo4j 3.0 также может использоваться с CONTAINS
предложение, например, вернуть мне всех пользователей, где логин содержит neo
буквы :
MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n
будет использовать созданный выше индекс для быстрого поиска. (nb: на данный момент CONTAINS чувствителен к регистру)
Для полного объяснения различий между устаревшим и индексом схемы, это действительно хорошо объяснено здесь: Автоиндекс Neo4j, устаревший индекс и схема меток: различия для полнотекстового поиска по отношению к узлу
К сожалению, упомянутая вами библиотека больше не поддерживается, как вы можете видеть из истории коммитов. https://github.com/jadell/neo4jphp/commits/master
Neo4j активно развивается, особенно в версии 3.0 теперь доступен новый двоичный протокол, который повышает производительность и уменьшает задержку по сравнению с http.
Я бы посоветовал вам (отказ от ответственности: я являюсь автором следующей библиотеки), чтобы использовать современный клиент, такой как https://github.com/graphaware/neo4j-php-client . (Обратите внимание, что это чистый драйвер, он не предлагает, например, функции ogm, вам придется писать свои собственные запросы Cypher)
Других решений пока нет …