Java 对两列执行Hibernate通配符查询
我正试图从数据库中按姓名选择人员。用户可以在一个输入框中键入姓名或姓氏或两者。例如,如果用户键入“Joh Smit”,则应返回John Smith,但用户也可以仅键入“Joh”或“Smi”来获取此人 我应该如何构建查询来处理通配符和来自用户输入的所有单词? 我的实际代码如下所示:Java 对两列执行Hibernate通配符查询,java,hibernate,search,query-builder,hibernate-search,Java,Hibernate,Search,Query Builder,Hibernate Search,我正试图从数据库中按姓名选择人员。用户可以在一个输入框中键入姓名或姓氏或两者。例如,如果用户键入“Joh Smit”,则应返回John Smith,但用户也可以仅键入“Joh”或“Smi”来获取此人 我应该如何构建查询来处理通配符和来自用户输入的所有单词? 我的实际代码如下所示: String queryFilter = ""; for(String part : filter.split(" ")){ queryFilter+=part.toLowerCase()+"* "; } qu
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()
时,我将无法搜索不精确的名称。您希望构建一个布尔查询,其中一个部分以firstname为目标,另一个部分以lastname为目标。大概是这样的:
String queryFilter = "";
for(String part : filter.split(" ")){
queryFilter+=part.toLowerCase()+"* ";
}
queryFilter = queryFilter.trim();
query = queryBuilder.keyword().wildcard().onField("firstname").andField("lastname").matching(queryFilter).createQuery();
Query luceneQuery=queryBuilder
.bool()
.应该()
.应该()
.createQuery()
另请参见Hibernate搜索在线文档,特别是“组合查询”部分。您可以根据Hibernate标准执行此操作。