elasticsearch - ElasticSearch 总结嵌套对象字段
问题描述
我有一个嵌套字段,我想使用脚本总结该嵌套对象的值。我不能使用聚合,因为这个总和是为范围过滤完成的。
我的映射:
{
"_doc" : {,
"properties" : {
"searchPrices" : {
"type" : "nested",
"properties" : {
"price" : {
"type" : "double"
},
"type" : {
"type" : "keyword"
}
}
}
}
}
}
我试过的查询:
{
"size": 100,
"query": {
"bool": {
"must": [
{
"nested": {
"path": "searchPrices",
"query": {
"bool": {
"must": [
{
"script": {
"script": """
int sum = 0;
for (obj in doc['searchPrices.price']) {
sum = sum + obj;
}
sum >= 200;"""
}
},
{
"term": {
"searchPrices.type": "recurringPrice"
}
}
]
}
}
}
}
]
}
}
}
问题是这个脚本只选择第一个嵌套文档,而不管文档中有多个搜索价格。
示例文档:
{
"id" : "v2",
"searchPrices" : [
{
"price" : 2000,
"type" : "recurringPrice",
},
{
"price" : 200,
"type" : "recurringPrice",
"conditions" : [
"addon1"
]
},
{
"price" : 400,
"type" : "recurringPrice",
"conditions" : [
"addon2"
]
}
]
}
所以,不考虑2600的价格,只考虑2000的价格。
解决方案
不幸的是,无痛脚本似乎不可能。
根据Elastic Team Member 回答的帮助无痛迭代嵌套字段文档,在查询时使用无痛脚本一次只能访问一个嵌套对象。
所以,你遭受的情况——只考虑2000作为价格——是很自然的。
推荐阅读
- azure - Azure Pipelines 连接到 Azure SQL 数据库 AAD - 用户登录失败
- python - 使用 Python 将具有 True 或 False 值的 2 个数据框列可视化为维恩图?真值表到维恩图?
- go - 通过 vendoring 修改 go 标准库 crypto/tls
- php - 将字符串数组转换为键/值数组
- c# - 我想使用直接链接下载文件而不读取文件
- biztalk - BizTalk 的 WrongBodyPartException 的可能原因
- javascript - 将查询集数据作为变量模板传递给 javascript
- mongodb - 如何配置每个数据库的 Mongodb 缓存大小?
- ruby - 为什么 Ruby Procs 有时会返回,有时会出错?
- sql-server - SQL 报表生成器替换特殊字符并删除第一个和最后一个字符