我查询了按日期和其他字段对数据进行分组的查询,我想按日期和电子邮件范围进行过滤,我尝试了仅过滤日期,并且在应用了电子邮件查询后也有效,但是也可以显示所有数据。 这是我的查询看起来像:
{
"_source": ["user_email","shipping_address.zipcode","eventtime"],
"query" : {
"bool":{
"filter": {
"range": {
"eventtime":{
"gt": start_date,
"lt": end_date
}
}
},
"should":{
"match_phrase_prefix" : {
"user_email": "christea2045@yahoo.com"
}
}
}
},
"aggs": {
"group_by_date":{
"date_histogram":{
"field" : "eventtime",
"interval" : "1d"
},
"aggs":{
"group_shipzip":{
"terms":{
"field": "shipping_address.zipcode.keyword"
}
}
}
}
}
}
答案 0 :(得分:0)
您需要在must子句中添加范围和电子邮件
"must": [
{
"range": {
"eventtime":{
"gt": start_date,
"lt": end_date
}
}
},
{
"match_phrase_prefix": {
"user_email": "abc1@yahoo.com"
}
}
]
在您的查询中,只有过滤器部分正在返回结果。由于电子邮件位于should子句中,即使没有匹配项,它也会返回文档。
如果您要在user_email上进行全文匹配,则最好在关键字字段上使用术语查询
{
"term": {
"user_email.keyword": {
"value": "abc1@yahoo.com"
}
}
}
``