Elasticsearch 5.6结合常量得分和布尔查询

时间:2018-01-25 13:51:16

标签: php elasticsearch search-engine relevance booleanquery

我目前正在使用搜索引擎处理使用 PHP API 查询 Elasticsearch 5.6 索引的网站。 我在特定查询中被困了很长时间,这就是我寻求社区帮助的原因。 让我提供一些更多细节:

  • ES索引包含作为人的文件,并且这些人具有birthname和姓氏(如果该人是男性或女性,则两个值都是相同的,不结婚)。还有一些信息,如名字,日期和其他与我的问题无关的信息。
  • 网站搜索引擎只有一个字段用于birthname和姓氏。

我被要求创建一个查询,因此每当用户在该字段中输入值时,我必须得到以下结果:

  • 如果值匹配100%birthname或一个人的姓氏,我应该使用完全相同的分数值
  • 如果该值与100%不匹配,那么我将获得至少5个字符的结果,这些字符在其birthname或姓氏中类似。
  • 必须以非常具体的方式对结果进行排序。 首先,匹配100%按日期排序的结果,birthname和lastname的字母顺序,然后匹配的结果部分按分数,日期和字母顺序排序。

我查询的字段分别命名为 nom.unsplit nom.ngram nomNaissance.unsplit nomNaissance.ngram

我一直在尝试这个查询,它为birthname上的搜索提供了完美的结果,但未能找到姓氏(显然)。如果我将其他2个字段添加到查询中,结果仍然不能令人满意,因为如果姓氏匹配,则elasticsearch会提供更好的相关性得分,而不是birthname匹配。

ES query

我还尝试过使用过滤器和boost的constant_score查询。它正在工作,但前提是我正在寻找100%的结果。 我尝试过将bool查询和常量分数查询结合起来,但我无法让它工作。 我想补充一点,搜索引擎包含更多字段,因此我需要能够在更大的bool查询中插入此特定查询,该查询收集我已经使用过的所有子查询。 我会接受任何建议,如果需要,我会提供补充信息。

0 个答案:

没有答案