Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对两列执行Hibernate通配符查询_Java_Hibernate_Search_Query Builder_Hibernate Search - Fatal编程技术网

Java 对两列执行Hibernate通配符查询

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

我正试图从数据库中按姓名选择人员。用户可以在一个输入框中键入姓名或姓氏或两者。例如,如果用户键入“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()
时,我将无法搜索不精确的名称。

您希望构建一个布尔查询,其中一个部分以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标准执行此操作。