两列上的Hibernate通配符查询

时间:2015-11-24 06:21:36

标签: java hibernate search query-builder hibernate-search

我试图通过名字和姓氏从数据库中选择人。用户可以在一个输入框中键入名称或姓氏或两者。例如。如果用户输入" Joh Smit"它应该返回John Smith,但是用户也可以输入" Joh"或者" Smi"得到这个人

我应该如何构建查询以处理来自用户输入的通配符和所有单词? 我的实际代码如下所示:

String queryFilter = "";
for(String part : filter.split(" ")){
    queryFilter+=part.toLowerCase()+"* ";
}
queryFilter = queryFilter.trim();

query = queryBuilder.keyword().wildcard().onField("firstname").andField("lastname").matching(queryFilter).createQuery();

由于.wildcard(),这无法处理来自用户输入的多个字词,但当我删除.wildcard()时,我将无法搜索不准确的名称。

1 个答案:

答案 0 :(得分:0)

您想构建一个布尔查询,其中一个部分以firstname为目标,另一个部分以lastname为目标。像这样:

查询luceneQuery = queryBuilder     .bool()       。应该( )       。应该( )     .createQuery();

另请参阅Hibernate Search在线文档 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query-querydsl - 特别是“合并查询”部分。