繁体   English   中英

如何使用Hibernate Lucene搜索完整词组和单个词条?

[英]How to search a full phrase along with single terms using Hibernate Lucene?

之前,我们的搜索方式类似于“父亲David Azrael”。 它返回所有带有“父亲”或“大卫”或“阿兹雷尔”的结果名称。

以下是图片中的代码:

String[] FIELDS =  { "id", "person.firstName", "person.middleName", "person.lastName" };
for (String field : FIELDS) {
           for (String match : pattern) {     
                   bool.should(qb.keyword().wildcard().onField(field).matching(match).createQuery());
           }
        }
        query = bool.createQuery();

除了上述情况外,现在还有其他要求,即最终用户要搜索“父亲David Azrael”; 他应该只会得到一个结果。

意味着如果我们搜索“父亲David Azrael”; 那么仅应显示具有该名称的结果,但如果用户搜索“父亲阿兹雷尔”,则该结果应可立即使用。

那么,为了实现相同的功能,需要对上述代码进行哪些更改?

您可以使用短语查询,如文档的5.1.2.4部分所示:

bool.should(qb
    .phrase()
    .onField(field)
    .sentence("Father David Azrael")
    .createQuery());

我不知道您对“父亲大卫·阿兹雷尔”和“父亲·阿兹雷尔”的区别对待是什么意思,所以我不会在那部分发表评论,但这就是您创建短语查询的方式。 您可以将词组与现有的通配符查询结合起来,方法是将两者都添加到布尔查询中以获取两组结果,而词组匹配通常会获得最高分。 或者,您可以先运行短语查询,然后在没有结果的情况下退回到通配符查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM