好吧,这一个对你们中的一个超级棒的弹性搜索专家来说可能不会太难。我得到了这个嵌套查询,我希望嵌套查询在一个非嵌套字段(状态)上进行过滤。我不知道把过滤器放在哪里。我试着把它放在一个查询中(如下),但没有给出正确的结果。你能帮我吗?
{
"aggs": {
"status": {
"terms": {
"field": "status",
"size": 0
}
}
},
"filter": {
"nested": {
"path": "participants",
"filter": {
"bool": {
"must": [
{
"term": {
"user_id": 1
}
},
{
"term": {
"archived": false
}
},
{
"term": {
"has_unread": true
}
}
]
}
}
}
},
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"term": {
"status": 8
}
}
]
}
}
}
}
}
这里有几个移动的片段:
>
您正在使用的顶级筛选器
是一个“后筛选器”,它用于在处理聚合后删除内容。它以这种方式存在是相当令人讨厌的,但它在0.90天就被否决了,它将在ElasticSearch5.0中完全删除。
通过将它放在过滤后的查询中,您很可能会获得更好的性能,更不用说这听起来是您的目标。
post_filter
.您的嵌套
筛选器的术语没有使用该字段的完整路径,而您应该这样做。
{
"term": {
"user_id": 1
}
}
应该是:
{
"term": {
"participants.user_id": 1
}
}
其余的嵌套对象也是如此。
假设您不希望状态
为8
,那么您就可以完美地完成了。
在聚合中使用大小
为0
意味着您将返回所有内容。这在较小的数据集上很好,但在较大的数据集上会很痛苦。
将它们放在一起(顺序无关紧要,但通常将聚合放在查询部分之后是个好主意,因为这就是它的执行方式):
{
"query": {
"filtered": {
"filter": {
"bool": {
"must" : {
"nested" : {
"path" : "participants",
"filter": {
"bool": {
"must": [
{
"term": {
"participants.user_id": 1
}
},
{
"term": {
"participants.archived": false
}
},
{
"term": {
"participants.has_unread": true
}
}
]
}
}
}
},
"must_not": {
"term": {
"status": 8
}
}
}
}
}
},
"aggs": {
"status": {
"terms": {
"field": "status",
"size": 0
}
}
}
}
注意:我将“must_not”部分从数组更改为单个对象。总是使用数组语法没有错,但我只是不想说明这两种格式都有效。当然,如果使用多个项,则必须使用数组语法。
我是Elasticsearch的新手,我试图创建一个过滤器来检索具有特定属性的文档。 属性在映射中定义为嵌套对象,如下所示: 我试图以以下形式执行一个复杂的查询: 这是elasticsearch 2.x。我做错了什么?
我试图构造一个ElasticSearch查询,但没有得到预期的结果。任何帮助都将不胜感激! 映射详细信息: null null 目前,每个嵌套的轮班文档都包含一个嵌套的calendarBlock文档,其中包含开始和结束日期时间字段,以及一个可以注册该轮班的最大志愿者人数字段。 查询 我试图构造的查询是经过筛选的查询。从Web上的窗体传入查询字符串。然后,我需要以编程方式将至少三个筛选器附加到这个查
鉴于这些文件: 如何才能用它们的最小总价值来过滤它们的价格范围? 现在我的查询如下所示: 所以它从逻辑上返回文档1和2,因为它们的价格都在这个范围内,但我只想得到文档2,因为我希望过滤器逻辑只应用于最低价格。
我希望通过第二个值(这里我将其标记为)过滤嵌套文件中的组。cointains 4个对象。我希望数组中第二个项大于0()的所有组。以下文档示例: 我的方法是使用,但由于某些原因,它不起作用。但是相同的脚本不在过滤器中,而是在中工作-下面是我的代码示例:
问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:
我试图在嵌套筛选器聚合中使用嵌套查询筛选器。当我这样做时,聚合返回时没有任何项。如果我将查询更改为简单的旧match_all筛选器,我确实会在bucket中获得项。 下面是我正在使用的映射的简化版本: 该查询在聚合上使用match_all筛选器: