如何在elasticsearch中使用与聚合相关的过滤器?
官方文档只给出了过滤器和聚合的小例子,没有对查询dsl进行正式描述——例如,将其与postgres文档进行比较。
通过尝试,我发现以下查询被elasticsearch接受(没有解析错误),但忽略了给定的过滤器:
{
"filter": {
"and": [
{
"term": {
"_type": "logs"
}
},
{
"term": {
"dc": "eu-west-12"
}
},
{
"term": {
"status": "204"
}
},
{
"range": {
"@timestamp": {
"from": 1398169707,
"to": 1400761707
}
}
}
]
},
"size": 0,
"aggs": {
"time_histo": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h"
},
"aggs": {
"name": {
"percentiles": {
"field": "upstream_response_time",
"percents": [
98.0
]
}
}
}
}
}
}
有些人建议使用查询而不是过滤。但官方文件通常建议对精确值进行过滤。查询的另一个问题是:虽然过滤器提供了和,但查询不提供。
有人能给我指一下文档、博客或书籍吗?它们描述了编写非平凡查询:至少是一个聚合加上多个过滤器。
关于@geekQ的答案的更多信息:为了支持带有空格字符的过滤器字符串,对于多通道术语搜索,请使用以下命令:
{ "aggs": {
"aggresults": {
"filter": {
"bool": {
"must": [
{
"match_phrase": {
"term_1": "some text with space 1"
}
},
{
"match_phrase": {
"term_2": "some text with also space 2"
}
}
]
}
},
"aggs" : {
"all_term_3s" : {
"terms" : {
"field":"term_3.keyword",
"size" : 10000,
"order" : {
"_term" : "asc"
}
}
}
}
} }, "size": 0 }
将您的过滤器放入过滤的查询中。
顶级过滤器仅用于过滤搜索点击,而不是面/聚合。在1.0中,由于这种常见的混淆,它被重命名为post_filter。
此外,你可能想看看这篇文章,了解为什么你经常想使用bool,而不是和http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/
我最终使用了一个过滤器聚合,而不是过滤查询。现在我有3个嵌套的aggs元素。
我还使用了布尔滤波器,而不是@alex brasetvik推荐的和,因为http://www.elasticsearch.org/blog/all-about-elasticsearch-filter-bitsets/
我的最终实现:
{
"aggs": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"_type": "logs"
}
},
{
"term": {
"dc": "eu-west-12"
}
},
{
"term": {
"status": "204"
}
},
{
"range": {
"@timestamp": {
"from": 1398176502000,
"to": 1400768502000
}
}
}
]
}
},
"aggs": {
"time_histo": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h"
},
"aggs": {
"name": {
"percentiles": {
"field": "upstream_response_time",
"percents": [
98.0
]
}
}
}
}
}
}
},
"size": 0
}
我试图使用过滤器聚合来支持前端的多选择方面值。 我有颜色和深度滤镜。 滤色器保存值:黑色(5)、蓝色(3)、红色(2) 深度过滤器保持值:70mm(3)、60mm(5)、50mm(3) 当我在滤色器中选择黑色时,所有其他选项(蓝色,红色)都没有响应。 我尝试添加 谢了,Sree。
我对Elasticsearch相当陌生,所以这是我的问题。我想用elasticsearch做一个搜索查询,想用多个术语过滤。 如果我想搜索用户'Tom',那么我希望获得用户'is active=1'、'is private=0'和'is owner=1'的所有匹配项。 这是我的搜索查询 谢谢你的帮助!!
我正在尝试在Elastic 2中创建一个过滤索引别名。十、 以下是所有青少年的资料,不分性别。我只想在这个过滤器里看到雌性。 这就是我试图创建索引别名的原因: 我看了这个问题,似乎是相同的答案,但是我的JSON一定有问题。 Elasticsearch将范围和术语连接到相同的数组项
像 这是我的质疑。这将作为呈现的响应 我的第一次尝试是将should的inside条件作为文本添加到一个节中
在Udemy教程中,我在这里遇到了这个查询: 我想知道是否有可能优化它?我在想两种可能的方法: > 将“流派”放入筛选器上下文中。但是一部电影可能有多种类型,所以我不确定使用type关键字和filter-term是否能在那里工作。 直接将“must_not”放在过滤器上下文中(没有bool)是行不通的,因为据我所知,过滤器不允许“过滤掉”,只允许“过滤保留什么”。但是如果我将must_not包装在