2017-12-21 8 views
0

Wenn ich nach "Autos blau" suche, bekomme ich jedes Ergebnis, das mit "Autos" oder "Blau" übereinstimmt, aber ich muss beide vergleichen. Ich habe gelesen, über die Einstellung einige defaultOperator zu AND, aber ich kann nicht finden, wo das zu tun ist, Auch ich kann PhraseQuery nicht verwenden, weil die Reihenfolge der Begriffe in der Suchanfrage irrelevant ist, Das ist mein Code so weit, Vielen Dank!Wie viele Begriffe mit Hibernate Search Query DSL zu erhalten?

// 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(); 

Hinweis: Ich verwende Hibernate Search 5.6.4

Antwort

2

Ich glaube, Sie suchen die einfache Abfrage-String-Funktion.

Weitere Informationen dazu finden Sie unter http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#_simple_query_string_queries.

Sie haben ein Beispiel mit .withAndAsDefaultOperator():

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

Dieser Blog-Eintrag das Grundprinzip dieser Funktion erklären könnte hilfreich sein zu: http://in.relation.to/2017/04/27/simple-query-string-what-about-it/.

+1

Beachten Sie, dass hierfür die Hiberenate-Suche 5.8.0 oder höher erforderlich ist. –

+0

Schöne Antwort, aber ich benutze Hibernate Search 5.6.4.Final wegen Spring Boot, gibt es eine Workaround? –

+0

Nun können Sie Ihre Hibernate-Suche aktualisieren, während Sie noch Spring Boot verwenden. Aber wenn du diese Version behalten willst, hilft dir das DSL nicht. Vor der Einführung der Funktion "Einfache Abfragezeichenfolge" habe ich mit dem MultiFieldQueryParser von Lucene die Abfrage erstellt und an die Hibernate-Suche übergeben. –