早些时候我们正在寻找像#David;父亲David Azrael"。它返回所有结果名称,包括术语父亲或大卫或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&#34 ;;他应该只得到一个结果。
意味着如果我们搜索"父亲David Azrael&#34 ;;然后只会出现具有此名称的结果,但如果用户搜索"父亲Azrael"然后它应该像现在一样工作。
那么上面的代码需要做些什么改变才能实现呢?
答案 0 :(得分:0)
您可以使用词组查询,如文档的section 5.1.2.4所示:
bool.should(qb
.phrase()
.onField(field)
.sentence("Father David Azrael")
.createQuery());
我不知道你的意思和#34; David Azrael神父"被对待的方式不同于父亲Azrael",所以我不会对那部分发表评论,但这就是你如何创建一个短语查询。您可以将短语与现有的通配符查询组合,方法是将两者都添加到布尔查询中以获取两组结果,短语匹配通常会获得最高分数。或者您可以先运行短语查询,然后在没有结果的情况下返回通配符查询。