2017-12-21 9 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(); 

注:私はHibernateの検索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

注意:これにはHibernate Search 5.8.0以降が必要です。 –

+0

良い答えですが、SpringブートのためにHibernate Search 5.6.4.Finalを使用していますが、回避策はありますか? –

+0

さて、Spring Bootを使っている間も、Hibernate Searchをアップグレードすることができます。しかし、このバージョンを維持したい場合、DSLはあなたを助けません。 Simple Query String機能が導入される前は、LuceneのMultiFieldQueryParserを使用してクエリを作成し、それをHibernate Searchに渡しました。 –

関連する問題