2013-10-11 6 views
0

Я построил очень простой поиск в спящем режиме из документации спящего режима. Мне сложно ограничить результаты и хотелось бы немного посоветовать, что я делаю неправильно.Hibernate Search Ограничение результатов

Сценарий

Допустим, я использую один объект с названием описание как так

@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
private String name; 

со следующими данными добавляются в индекс

1. Dell Laptop 
2. Dell Desktop 
3. HP Desktop 

Мой поиск выглядит так ,

FullTextSession fullTextSession = Search.getFullTextSession(sessionManager.getSession()); 
    QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Computer.class).get(); 
    Query luceneQuery = queryBuilder.keyword().onFields("name").matching(keyword).createQuery(); 

    org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Computer.class); 

Теперь все работает хорошо, когда вы делаете поиск ключевых слов, используя следующую команду,

Dell returns Dell Laptop, Dell Desktop 
Desktop returns Dell, HP 

Однако, когда вы делаете поиск, как это так, она не ограничивает результаты должным образом

Dell Desktop returns Dell Laptop, Dell Desktop, HP Desktop. 

Как бы я ограничить результаты только возвратом одного совпадения?

ответ

1

«Рабочий стол Dell», вероятно, не является ни одним термином. вы должны попытаться найти его как фразу.

Query luceneQuery = queryBuilder.phrase().onField("name").sentence(keyword).createQuery(); 
org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Computer.class); 

Вы также можете использовать анализатор запросов, как описано в документации Hibernate Search, Chapter 5, в примере 5,2

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