Индекс Neo4j для полнотекстового поиска

Я работаю над базой данных neo4j версии 2.0. У меня есть следующие требования:

Случай 1. Я хочу получить все записи, где имя содержит некоторую строку, например, если я ищу Neo4j, тогда должны быть возвращены все записи, имеющие name Neo4j Data, Neo4j Database, Neo4jDatabase и т. д.

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

Чувствительность к регистру также заслуживает внимания.

Я прочитал несколько вещей о например, индексе, полнотекстовом поиске, устаревшем индексе и т. д., так что лучше всего подойдет для моего случая, или мне придется использовать эластичный поиск. > и т. д.

Я использую spring-data-neo4j в своем приложении, поэтому предоставьте некоторую конфигурацию для SDN.


person Ankit Gupta    schedule 14.11.2014    source источник


Ответы (2)


Добавьте к своему имени аннотацию @Indexed:

@Indexed(indexName = "whateverIndexName", indexType = IndexType.FULLTEXT)
private String name;

Затем запросите его следующим образом (пример для метода в репозитории SDN, вы можете использовать аналогичный везде, где вы используете шифр):

@Query("START n=node:whateverIndexName({query}) return n"
Set<Topic> findByName(@Param("query") String query);

Neo4j использует lucene в качестве серверной части для индексации, поэтому значение запроса должно быть действительным запросом lucene, например. "имя: neo4j" или "имя: neo4j*".

Существует статья, объясняющая путаницу вокруг различных индексов Neo4j http://nigelsmall.com/neo4j/index-confusion. .

person František Hartman    schedule 14.11.2014

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

Посетите блог Майкла Хангера: jexp.de/blog

конкретно это сообщение: http://jexp.de/blog/2014/03/full-text-indexing-fts-in-neo4j-2-0/

person Kevin    schedule 14.11.2014