我试图通过名字和姓氏从数据库中选择人。用户可以在一个输入框中键入名称或姓氏或两者。例如。如果用户输入" 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()
时,我将无法搜索不准确的名称。
答案 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 - 特别是“合并查询”部分。