2016-02-20 84 views
0

我不太確定這可能是多麼牽扯,但有人可以幫助我解決以下問題。Hibenate在多個字段中搜索DSL和Lucene查詢

我試圖在我的項目中實現搜索功能,基於員工firt和姓氏。爲此,我使用了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); 

    } 
} 

當我搜索「李四」我所期望的結果應符合以下兩個
姓:約翰名字:李四
姓:喬納森名字:李四
但事實並非如此,我只能根據FirstName [「john」]或LastName [「doe」]進行搜索,但不能同時使用

如何解決這個問題,任何指針將不勝感激。提前致謝。

+0

我GOOGLE了這個,並仍在工作[但如果我可以得到一個definitve響應張貼在這裏] –

回答

0

您確實想要創建兩個查詢,一個針對名字和一個針對姓,然後通過運算符將它們組合起來。類似於

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

這意味着您要查找其中任何一個查詢都匹配的結果。