gpt4 book ai didi

elasticsearch - 为每个过滤后的Elasticsearch文档运行一个子查询

转载 作者:行者123 更新时间:2023-12-03 02:20:27 25 4
gpt4 key购买 nike

我有一个名为雇员的索引,其结构如下:

{
id: integer,
name: text,
age: integer,
cityId: integer,
resumeText: text <--------- parsed resume text
}
我想搜索具有特定条件的员工,例如年龄> 40,resumeText包含特定技能或员工属于某个城市等,并且到目前为止需要以下查询:
{
query:{
bool:{
should:[
{
term:{
cityId:2990
},
{
match:{
resumeText:"marketing"
},
{
match:{
resumeText:"critical thinking"
}}}
],
filter:{
range:{
age:{
gte:40
}}}}}
}
这给了我预期的结果,但我也想知道返回的文档/员工中,哪些是简历文本包含上述技能的文档/员工。例如,在回复中,我想获得一些文档,其中提到该文档符合“批判性思维”,该员工已匹配所有技能,而该员工未匹配任何技能(因为它是根据其他过滤器返回的)
我需要做些什么更改才能获得所需的结果:
  • 可以提供帮助吗?
  • 我们可以为每个过滤的文档朗读脚本以计算所需的结果(每个文档的子查询)吗?
  • 还有其他方法吗?
  • 最佳答案

    是的,您可以使用聚合。
    Refer this
    您可以像正在寻找所需的每种技能的多少履历一样进行分类。

    GET employees/_search
    {
    "size": 0,
    "aggs" : {
    "messages" : {
    "filters" : {
    "filters" : {
    "marketing_resume_count" : { "match" : { "resumeText" : "marketing" }},
    "thinking_resume_count" : { "match" : { "resumeText" : "thinking" }}
    }
    }
    }
    }
    }
    扩展到您的用例:
    您可以将 query部分添加到查询中,如下所示
    GET employees/_search
    {
    "size": 0,
    "query":{
    "match":{
    "region":"AM"
    }
    },
    "aggs" : {
    "messages" : {
    "filters" : {
    "filters" : {
    "marketing_resume_count" : { "match" : { "resumeText" : "marketing" }},
    "thinking_resume_count" : { "match" : { "resumeText" : "thinking" }}
    }
    }
    }
    }
    }
    您可以使用 range查询来处理 gtelet条件。您可以引用 this获取范围查询示例。可以用来代替 query部分。

    关于elasticsearch - 为每个过滤后的Elasticsearch文档运行一个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62488396/

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