gpt4 book ai didi

json - 使用连接参数的Elasticsearch存储桶聚合

转载 作者:行者123 更新时间:2023-12-02 23:27:21 26 4
gpt4 key购买 nike

我正在使用Elasticsearch API和文档的架构,如下所示

{
name: "",
born_year: "",
born_month: "",
born_day: "",
book_type: "",
price: <some number>,
country: ""
}

现在,我需要获取每个在1995年之前出生的名字的文档计数(born_year + born_month + born_day <“20051220”)。我该如何实现?

我尝试了这个:
{
"query": {
"query_string": {
"query": "country:\"SL\""
}
},
"size": 0,
"aggs": {
"total": {
"terms": {
"field": "name"
}
}
}
}

但是我不知道如何为生日添加过滤器。

最佳答案

如@val所述,您需要添加一个实际日期字段,可以通过在创建时将这三个字段串联起来轻松添加。
但是,您如何根据日期范围进行过滤,有两种方法,两种方法都会返回不同的结果集
现在,您可以选择过滤级别。

您提到在国家/地区字段上进行查询。但是您没有提到要在什么级别上过滤日期范围。对于这两种情况,我都会给您查询。

映射-假设您创建日期字段。

{
name:"",
born_year:"",
born_month:"",
born_day:"",
book_type:"",
price:<some number>,
country:"",
date : ""
}

情况-1)仅过滤名称集合的日期范围,此处的文件计数不受日期范围过滤器的影响
{
"query": {
"query_string": {
"query": "country:\"SL\""
}
},
"aggs": {
"total": {
"filter": {
"range": {
"date": {
"gte": "your_date_mx",
"lte": "your_date_min"
}
}
},
"aggs": {
"NAME": {
"terms": {
"field": "name",
"size": 10
}
}
}
}
}
}

情况2)在这种情况下,由于我们在查询级别添加了日期范围过滤器,因此您的文档计数和汇总都将针对日期范围进行过滤。
{
"query": {
"query_string": {
"query": "country:\"SL\""
},
"bool": {
"must": [
{
"range": {
"date": {
"gte": "your_date_mx",
"lte": "your_date_mic"
}
}
}
]
}
},
"aggs": {
"toal": {
"terms": {
"field": "name",
"size": 10
}
}
}
}

因此,向聚合添加过滤器将仅影响aggs计数。
编辑-
使用groovy脚本的Approach1)尝试将字符串压缩并解析为整数,然后与您的输入日期进行比较。
{
"query": {
"bool": {
"must": [
{}
],
"filter": {
"script": {
"script": {
"inline": "(doc['year'].value + doc['month'].value + doc['date'].value).toInteger() > 19910701",
"params": {
"param1": 19911122
}
}
}
}
}
}
}

确保在索引索引日期(或月份)时用一位数字表示,例如6如06

2)方法2-解析字符串的确切日期(首选)
{
"query": {
"bool": {
"must": [
{}
],
"filter": {
"script": {
"script": {
"inline": "Date.parse('dd-MM-yyyy',doc['date'].value +'-'+ doc['month'].value +'-'+ doc['year'].value).format('dd-MM-yyyy') > param1",
"params": {
"param1": "04-05-1991"
}
}
}
}
}
}
}

第二种方法是更好的方法,因为您不必担心每个字段(日期,月,日)的字符串维护,以后再解析为适当的int进行比较。

关于json - 使用连接参数的Elasticsearch存储桶聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41356852/

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