两列上的 Hibernate 通配符查询
Hibernate wildcard query on two columns
我正在尝试 select 数据库中的人的名字和姓氏。用户可以在一个输入框中键入姓名或姓氏或同时键入两者。例如。如果用户输入 "Joh Smit" 它应该 return 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()
时,我将无法搜索不准确的名称。
您想构建一个布尔查询,其中一部分针对名字,另一部分针对姓氏。像这样:
查询 luceneQuery = queryBuilder
.布尔()
。应该( )
。应该( )
.createQuery();
另请参阅 Hibernate Search 在线文档 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query-querydsl - 特别是 "combining queries" 部分。
我正在尝试 select 数据库中的人的名字和姓氏。用户可以在一个输入框中键入姓名或姓氏或同时键入两者。例如。如果用户输入 "Joh Smit" 它应该 return 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()
时,我将无法搜索不准确的名称。
您想构建一个布尔查询,其中一部分针对名字,另一部分针对姓氏。像这样:
查询 luceneQuery = queryBuilder .布尔() 。应该( ) 。应该( ) .createQuery();
另请参阅 Hibernate Search 在线文档 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query-querydsl - 特别是 "combining queries" 部分。