gpt4 book ai didi

elasticsearch - “Filter then Aggregation”还是“Filter Aggregation”?

转载 作者:行者123 更新时间:2023-12-02 22:47:44 26 4
gpt4 key购买 nike

我最近在研究ES,发现可以达到几乎相同的结果,但是对于这两者之间的 DIFFERENCE ,我不清楚。

"Filter then Aggregation"

POST kibana_sample_data_flights/_search
{
"size": 0,
"query": {
"constant_score": {
"filter": {
"term": {
"DestCountry": "CA"
}
}
}
},
"aggs": {
"ca_weathers": {
"terms": { "field": "DestWeather" }
}
}
}

"Filter Aggregation"
POST kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"ca": {
"filter": {
"term": {
"DestCountry": "CA"
}
},
"aggs": {
"_weathers": {
"terms": { "field": "DestWeather" }
}
}
}
}
}

我的问题
  • 为什么有两个相似的功能?我相信我错了,但是有什么区别呢?
    (请不要理会结果格式,这不是我要问的问题; p)
  • 如果我想过滤掉不相关/不匹配并开始对许多文档进行汇总的哪个更好?
  • 最佳答案

    "query"中使用它时,将在索引中的所有文档上创建一个上下文。在这种情况下,它的作用类似于普通过滤器:SELECT * FROM index WHERE (my_filter_condition1 AND my_filter_condition2 OR my_filter_condition3...)

    当您在"aggs"中使用它时,您将在以前可能已经(或尚未)过滤的所有文档上创建上下文。假设您的结构如下:

    #OPTION A
    {
    "aggs":{
    t_shirts" : {
    "filter" : { "term": { "type": "t-shirt" } }
    }
    }
    }

    没有“查询”,与拥有
    #OPTION B
    {
    "query":{
    "filter" : { "term": { "type": "t-shirt" } }
    }
    }

    但是结果将在不同的字段中返回。

    在选项A中,结果将在 aggregations字段中返回。

    在选项B中,结果将在 hits字段中返回。

    我建议您始终将过滤器应用于 query部分,以便您可以使用已过滤文档的次安全聚合。同样是因为 Aggrgegations比查询花费更多的性能。

    希望这会有所帮助! :D

    关于elasticsearch - “Filter then Aggregation”还是“Filter Aggregation”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667127/

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