gpt4 book ai didi

elasticsearch - 如何通过字段值限制 ElasticSearch 结果?

转载 作者:行者123 更新时间:2023-12-02 23:00:28 24 4
gpt4 key购买 nike

我们有一个使用映射器附件插件在 ElasticSearch 中索引简历文档的系统。除了索引文档之外,我还存储了一些基本信息,例如它是否与申请人或员工、他们的姓名以及他们在系统中分配的 ID 相关联。运行的查询在遇到 ES 时可能看起来像这样:

{
"size" : 100,
"query" : {
"query_string" : {
"query" : "software AND (developer OR engineer)",
"default_field" : "fileData"
}
},
"_source" : {
"includes" : [ "applicant.*", "employee.*" ]
}
}

并让我得到如下结果:
"hits": [100]
0: {
"_index": "careers"
"_type": "resume"
"_id": "AVEW8FJcqKzY6y-HB4tr"
"_score": 0.4530588
"_source": {
"applicant": {
"name": "John Doe"
"id": 338338
}
}
}...

我要做的是限制结果,因此如果 ID 为 338338 的 John Doe 在系统中有三个不同的简历都与查询匹配,我只会得到一个匹配,最好是得分最高的一个(尽管那不是重要,只要我能找到那个人)。我一直在尝试使用过滤器和聚合的不同选项,但我还没有偶然发现这样做的方法。

在我得到结果后,我可以在调用 ES 的应用程序中采取各种方法来解决这个问题,但如果我可以在 ES 方面做到这一点,那将是更可取的。由于我将查询限制为 100 个结果,因此我想取回 100 个个人,而不是取回 100 个结果,然后发现其中 25% 是与同一个人相关的文档。

最佳答案

您想要做的是获取前 100 条唯一记录的聚合,然后是请求“top_hits”的子聚合。这是我系统中的一个示例。在我的例子中,我是:

  • 将结果大小设置为 0,因为我只关心聚合
  • 将聚合的大小设置为 100
  • 对于每个聚合,获得前 1 个结果

  • GET index1/type1/_search
    {
    "size": 0,
    "aggs": {
    "a1": {
    "terms": {
    "field": "input.user.name",
    "size": 100
    },
    "aggs": {
    "topHits": {
    "top_hits": {
    "size": 1
    }
    }
    }
    }
    }
    }

    关于elasticsearch - 如何通过字段值限制 ElasticSearch 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35514807/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com