簡體   English   中英

和Hibernate(lucene)搜索中的運算符

[英]And operator in Hibernate (lucene) search

我正在使用以下代碼使用hibernate-search進行搜索。 但這會標記搜索查詢並進行“ 或”搜索 ,而我想進行“ 與”搜索 我怎么做?

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
    String searchQuery = "test query";

    QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Customer.class).get();

    TermMatchingContext onFields = qb.keyword().onFields("customer.name","customer.shortDescription","customer.longDescription");

    org.apache.lucene.search.Query query = onFields.matching(searchQuery).createQuery();

    FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Customer.class);

    List<Customization> result = persistenceQuery.getResultList();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Customer.class).get();
TermMatchingContext onFields = qb.keyword().onFields("customer.shortDescription",  "customer.longDescription");

BooleanJunction<BooleanJunction> bool = qb.bool();
org.apache.lucene.search.Query query = null;
String[] searchTerms = searchQuery.split("\\s+");
for (int j = 0; j < searchTerms.length; j++) {
   String currentTerm = searchTerms[j];
   bool.must(onFields.matching(currentTerm).createQuery());
}

query = bool.createQuery();

FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Customer.class);
resultList = persistenceQuery.getResultList();

對於Lucene,“ 或”邏輯是默認設置。 您可以按照以下說明使用布爾DSL查詢-http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query-querydsl ,但這可能無法解決您的問題但是,因為您似乎將兩個查詢詞都放在一個字符串中。 根據您的用例(例如,搜索字符串由用戶提供),從Lucene查詢解析器獲取Lucene查詢可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM