2013-11-09 2 views
0

получить доступ к полнотекстовым индексом по findAllByQuery() метод хранилища, он отлично работает, но я не могу передать нумерации страниц Params, поэтому я пытаюсь Cypher запрос, который может использовать LIMIT ниже мои Testings:Spring Data Neo4j - Индекс Полный текст в Cypher запросе

Случай 1 - работает отлично, но жестко прописывать

@Query("START n=node:searchName('name:*test*') return n") 
EndResult<SomeGraphObject> findByName() 

Случай 2 (никогда не работайте), дать термин = "* тест *", бросить исключение

@Query("START n=node:searchName('name:{0}') return n") 
EndResult<SomeGraphObject> findByName(String term) 

Случай 3 (Частично работает) - работает хорошо, когда дают luceneExpression = "Имя: * тест *", но не работает, когда дайте luceneExpression = "name: * test test *", я имею в виду, что не работает, когда строка запроса содержит пробел.

@Query("START n=node:searchName({0}) return n") 
EndResult<SomeGraphObject> findByName(String luceneExpression) 

Другой вопрос, когда я использую findAllByQuery() метод хранилища, индекс searchName будет создан, когда первый раз создать или запрос. Но когда я использую запрос Cypher без создания индекса searchName, он выдаст «Индекс searchName не существует».

Любая помощь будет принята с благодарностью.

SomeGraphObject.java

@NodeEntity 
public class SomeGraphObject { 

    @GraphId Long id; 

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

} 
+0

http://stackoverflow.com/questions/16026027/neo4j-fulltext-indices-and-auto-indexing-in-cypher – Evgenii

+0

Hi Eugeny, спасибо за ответ, но эта ссылка ответит только на случай 1, который уже работает , проблема заключается в жестком кодировании. – gozizibj

+0

Можете ли вы попробовать 'luceneExpression =" имя: \ '* test test * \' ''? – Evgenii

ответ

0

Для динамического выражения запроса вы должны использовать только случай 3 кода. Причина пространство не работает, потому что в Lucene пространство означает другое выражение, но по какой-то причине Neo4j требует имя поля перед любым выражением означает, что вы должны использовать либо:
name:*test name:test*
name:(*test test*)

BTW Я думаю, что запрос, начинающийся с символа '*', запрещен в Lucene, так что это странно, что это работает.

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