[英]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.