我正在尝试创建一个查询,该查询根据与Excel中的SumIf相比最好的计算返回文档。
我的映射的一个非常简化的版本是:
{
"item": {
"properties": {
"name": {
"type": "text"
},
"data": {
"properties": {
"inventory": {
"properties": {
"locations": {
"type": "nested",
"properties": {
"state": {
"type": "keyword"
},
"amount": {
"type": "double"
}
}
},
"total": {
"type": "double"
}
}
}
}
}
}
}
}
(此数据在实际系统中没有多大意义,但我无法发布实际映射。)
两个示例文档可能是:
{
"name": "guitar",
"data": {
"inventory": {
"locations": [
{
"state": "CA",
"amount": 200
},
{
"state": "AZ",
"amount": 100
},
{
"state": "NY",
"amount": 300
}
],
"total": 600
}
}
}
{
"name": "piano",
"data": {
"inventory": {
"locations": [
{
"state": "CA",
"amount": 200
},
{
"state": "AZ",
"amount": 100
},
{
"state": "KY",
"amount": 50
}
],
"total": 350
}
}
}
我希望能够返回一个查询,该查询返回“ NY”和“ CA”嵌套文档的总和大于150的文档。在示例数据的情况下,它应该返回两个文件,即使NY不在第一个文件中,因为CA本身已经是200。
我已经阅读了Elastic提供的大多数聚合文档,但是我一直找不到解决方法。
我很想知道如何解决此问题的一些指示。
答案 0 :(得分:0)
我认为您不需要汇总,而是通过Script Query完成的自定义搜索查询。
不幸的是,嵌套文档的设计方式无法通过Script Query实现。
也就是说,这可能不是一个精确的解决方案,但是以下查询将返回所有具有CA
和/或NY
的文档,并根据{{1} } sum
。
这样,amount
较高的文档将出现在结果的开头,其后是价值较小的文档。
sum of amounts
让我知道这是否有帮助!