2016-05-21 4 views
1

Я смотрю в клиент обыватель Neo4j (https://github.com/jadell/neo4jphp/wiki)Neo4j PHP создания индексов

Это выглядит очень перспективным и удобным в использовании. Однако я немного запутался в индексах. Я знаю, что в Neo4j вы можете добавить индекс:

CREATE INDEX ON :Person(name) 

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

В обывателя клиентской библиотеке, в разделе индексов показывает, что вы можете создавать и добавлять индексы к узлам любит это:

$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'); 

?

ответ

1

Вышеуказанные выше методы добавляют узел и его свойство движения к индексу lucene. Не то, чтобы этот вид индекса был отмечен как наследие с тех пор, как пару раз.

индексы схемы работают как следовать в настоящее время:

Вы создаете индекс на комбинации метка/собственности, например, если вы знаете, что вы должны найти пользователей по их входа в собственности, как правило, целесообразно добавить индекс для быстрого поиска:

CREATE INDEX ON :User(login); 

Этот вид индекса, так как Neo4j 3,0 также может быть использован с пунктом CONTAINS, например, получить мне всех пользователей, где Логин содержит neo буквы:

MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n 

будет использовать указанный выше индекс для быстрого извлечения. (NB: как сейчас СОДЕРЖИТ чувствителен к регистру)

Для полного разностного объяснения между наследием и индексом схемы, это очень хорошо описано здесь: Neo4j auto-index, legacy index and label schema: differences for a relative-to-a-node full-text search

К сожалению, библиотека, вы упомянули не поддерживается больше, поскольку вы можете видеть из истории коммитов https://github.com/jadell/neo4jphp/commits/master

Neo4j развивается много, особенно версия 3.0 теперь имеет новый бинарный протокол, который улучшает производительность и уменьшает задержку по сравнению с http.

Я бы посоветовал вам (отказ от ответственности: я являюсь автором следующей библиотеки), чтобы использовать современного клиента, например https://github.com/graphaware/neo4j-php-client. (Обратите внимание, что это чистый драйвер, это не предлагает функции ogm, например, вам придется писать собственные запросы Cypher)

 Смежные вопросы

  • Нет связанных вопросов^_^