2017-12-21 25 views
0

"cars blue"를 검색 할 때 "cars"또는 "blue"와 일치하는 모든 결과를 얻지 만 둘 다 일치시켜야합니다. 일부 defaultOperatorAND에 설정하는 방법에 대해 읽었지만 그 위치를 찾을 수 없습니다. 또한 PhraseQuery을 사용할 수 없습니다. 검색어의 검색어 순서가 부적절하기 때문에 이것은 지금까지 작성한 코드입니다. 감사!Hibernate 검색 쿼리 DSL을 사용하여 여러 용어를 일치시키는 방법은 무엇입니까?

// create the query using Hibernate Search query DSL 
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory() 
    .buildQueryBuilder().forEntity(Articulo.class).get(); 

// a very basic query by keywords 
BooleanJunction<BooleanJunction> bool = queryBuilder.bool(); 

bool.must(queryBuilder.keyword() 
    .onFields("description") 
    .matching(text) 
    .createQuery() 
); 

Query query = bool.createQuery(); 

FullTextQuery jpaQuery = 
     fullTextEntityManager.createFullTextQuery(query, Articulo.class); 

return jpaQuery.getResultList(); 

참고 : 나는 하이버 네이트 검색 5.6.4

답변

2

을 사용하고 난 당신이 단순 쿼리 문자열 기능을 찾고 생각합니다.

자세한 내용은 http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_simple_query_string_queries을 참조하십시오. http://in.relation.to/2017/04/27/simple-query-string-what-about-it/ :

Query luceneQuery = mythQB 
    .simpleQueryString() 
    .onField("history") 
    .withAndAsDefaultOperator() 
    .matching("storm tree") 
    .createQuery(); 

이 기능의 이론적 근거를 설명하는이 블로그 포스트가 도움이 너무 수 있습니다 :

당신은 .withAndAsDefaultOperator (와 예)가 있습니다.

+1

참고 : Hiberenate Search 5.8.0 이상이 필요합니다. –

+0

좋은 답변이지만 봄 부팅 때문에 최대 절전 모드 검색 5.6.4을 사용하고 있습니다. 해결 방법이 있습니까? –

+0

Spring Boot를 사용하면서 Hibernate Search를 업그레이드 할 수 있습니다. 그러나이 버전을 계속 사용하려면 DSL이 도움이되지 않습니다. Simple Query String 기능이 소개되기 전에 Lucene의 MultiFieldQueryParser를 사용하여 질의를 작성하여 Hibernate Search에 전달했습니다. –