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" 时,我希望结果应该与以下两个匹配
名字:John 姓氏:Doe
名字:johnathan 姓氏:Doe
但事实并非如此,我只能根据 FirstName["john"] 或 LastName["doe"] 进行搜索,但不能同时使用 .

我该如何解决这个问题,任何指点将不胜感激。提前致谢。

您真的想创建两个查询,一个针对名字,一个针对姓氏,然后通过 SHOULD 运算符将它们组合起来。像

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

这意味着您正在查找其中一个查询匹配的结果。