我不确定这可能涉及多少,但有人可以帮我解决下面的问题。
我正在尝试根据员工的姓名和名字在我的项目中实施搜索功能。我为此目的使用了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”时,我希望结果与下面的两个匹配
名字:John姓名:Doe
名字:johnathan姓氏:Doe
但事实并非如此,我只能基于 FirstName [“john”]或LastName [“doe”]进行搜索,但不能同时搜索。
我如何解决这个问题,任何指针都会非常感激。谢谢你。
答案 0 :(得分:0)
你真的想创建两个查询,一个针对名字,一个针对姓氏,然后通过 SHOULD 运算符组合它们。像
这样的东西Query combinedQuery = querybuilder
.bool()
.should( firstNameQuery )
.should( lastNameQuery )
.createQuery();
这意味着您正在寻找任一查询匹配的结果。