簡體   English   中英

多個字段上的Hibernate Search DSL和Lucene查詢

[英]Hibernate Search DSL and Lucene query on Multiple Fields

我不確定這可能會涉及多少,但是有人可以幫助我解決以下問題。

我正在嘗試根據員工的姓氏和姓氏在我的項目中實現搜索功能。 我已經為此目的使用了Spring Data REST和Hibernate Search。

@Transactional
public  search(String searchText) {

    FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search
            .getFullTextEntityManager(entityManager);
    QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Employee.class).get();
    org.apache.lucene.search.Query luceneQuery = qb.keyword().wildcard()
            .onFields("firstName", "middleName", "lastName").matching(searchText + "*").createQuery();
    javax.persistence.Query jpaQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, Employee.class);
    List result = jpaQuery.getResultList();
    List<EmployeeSearchDTO> listOfDTO = new ArrayList<>();
    EmployeeSearchDTO employeeDTO;
    Iterator<Employee> itr = result.iterator();
    while (itr.hasNext()) {
        Employee employee = itr.next();
        employeeDTO = new EmployeeSearchDTO(employee);
        listOfDTO.add(employeeDTO);

    }
}

當我搜索“ john doe”時,我希望結果應與以下兩個匹配
名:約翰姓:母鹿
名字:johnathan姓氏:Doe
但是事實並非如此,我只能基於FirstName [“ john”]或LastName [“ doe”]進行搜索,而不能同時基於兩者進行搜索

我該如何解決,任何指針將不勝感激。 提前致謝。

您確實要創建兩個查詢,一個針對姓氏,一個針對姓氏,然后通過SHOULD運算符將它們組合在一起。 就像是

Query combinedQuery = querybuilder
.bool()
    .should( firstNameQuery )
    .should( lastNameQuery )
.createQuery();

這意味着您正在尋找兩個查詢都匹配的結果。

暫無
暫無

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

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