Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
Hibernate搜索查询名字和姓氏_Hibernate_Hibernate Search - Fatal编程技术网

Hibernate搜索查询名字和姓氏

Hibernate搜索查询名字和姓氏,hibernate,hibernate-search,Hibernate,Hibernate Search,我正在使用Hibernate搜索查找数据库中的人员 它们为firstName和lastName字段编制了索引 我想要看起来有点像这样的结果: 搜索:“罗伯·保罗” 匹配: 罗伯特·保尔森 保罗·罗伯逊 不应匹配: 罗伯特罗伯逊 罗伯特·亨德里克斯 安娜·保尔森 而像“Rob”这样的搜索 应匹配: 罗伯特·保尔森 保罗·罗伯茨 罗伯茨 我的代码如下所示: FullTextEntityManager fullTextEntityManager = Search.getFullTe

我正在使用Hibernate搜索查找数据库中的人员

它们为firstName和lastName字段编制了索引

我想要看起来有点像这样的结果:

搜索:“罗伯·保罗”

匹配:

  • 罗伯特·保尔森
  • 保罗·罗伯逊
不应匹配:

  • 罗伯特罗伯逊
  • 罗伯特·亨德里克斯
  • 安娜·保尔森
而像“Rob”这样的搜索

应匹配:

  • 罗伯特·保尔森
  • 保罗·罗伯茨
  • 罗伯茨
我的代码如下所示:

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);

    Query query = fullTextEntityManager
        .getSearchFactory()
        .buildQueryBuilder()
        .forEntity(Customer.class)
        .overridesForField("firstName", "edgeNGram_query")
        .overridesForField("lastName","edgeNGram_query")
        .get()
        .simpleQueryString()
        .onFields("firstName","lastName")
        .matching(text)
        .createQuery();

我希望有人能给我一些启发。

考虑到搜索将很简单,因为您只匹配名字和姓氏,我将解析输入,并在每个标记(如果尚未存在)后添加一个
*
,以触发通配符搜索

使用简单的查询字符串查询是一种方法,这样您就走上了正确的道路,但您需要添加一个
.withAndAsDefaultOperator()
,以便所有搜索的单词都是必需的