我希望通过第二个值(这里我将其标记为value_filtered
)过滤嵌套文件统计信息
中的组。stats
cointains 4个对象。我希望数组中第二个项大于0(value_filtered>0
)的所有组。以下文档示例:
{
"group_name": "Group_1",
"date": "2020-05-20",
"stats" : [
{
"name_en" : "xxx",
"value" : 45
},
{
"name_en" : "value_filtered",
"value" : 0
},
{
"name_en" : "vvv",
"value" : 20
},
{
"name_en" : "zzz",
"value" : 0.666
}
]
}
我的方法是使用筛选器脚本
,但由于某些原因,它不起作用。但是相同的脚本不在过滤器中,而是在脚本字段
中工作-下面是我的代码示例:
query = {
'size': 100,
'_source': {
'include': ['group_name']
},
"query": {
"bool": {
"filter": [
{
'term': {
'date': '2020-05-20'
}
}
]
}
},
'script_fields': {
'stats': {
'script': {
'lang': 'painless',
'source': """
int value_filtered = (int) params._source['metrics'][1].value;
return value_filtered > 0;
"""
}
}
}
}
脚本字段&脚本过滤器无痛上下文略有不同。
以下是你想要的:
{
"size": 100,
"_source": {
"include": [
"group_name"
]
},
"query": {
"bool": {
"filter": [
{
"term": {
"date": "2020-05-20"
}
},
{
"script": {
"script": {
"source": """
def stats_values = doc['stats.value'];
if (stats_values.size() == 0 || stats_values.length < 2) {
return false;
}
int value_filtered = (int) stats_values[1];
return value_filtered > 0;
"""
}
}
}
]
}
}
}
好吧,这一个对你们中的一个超级棒的弹性搜索专家来说可能不会太难。我得到了这个嵌套查询,我希望嵌套查询在一个非嵌套字段(状态)上进行过滤。我不知道把过滤器放在哪里。我试着把它放在一个查询中(如下),但没有给出正确的结果。你能帮我吗?
鉴于这些文件: 如何才能用它们的最小总价值来过滤它们的价格范围? 现在我的查询如下所示: 所以它从逻辑上返回文档1和2,因为它们的价格都在这个范围内,但我只想得到文档2,因为我希望过滤器逻辑只应用于最低价格。
问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套
null 我也尝试使用scripted_field,但是脚本字段似乎是在最后一个阶段计算的,在查询过程中不可用。 我也有一个按照相同逻辑进行排序的方法(根据给定仓库中库存的总和对产品进行排序),它像一个魅力一样工作: 但我也找不到访问此排序值的方法:(
我试图在嵌套筛选器聚合中使用嵌套查询筛选器。当我这样做时,聚合返回时没有任何项。如果我将查询更改为简单的旧match_all筛选器,我确实会在bucket中获得项。 下面是我正在使用的映射的简化版本: 该查询在聚合上使用match_all筛选器:
问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他