【问题标题】:ElasticSearch query filter on nested documents嵌套文档上的 ElasticSearch 查询过滤器
【发布时间】:2018-05-10 15:19:00
【问题描述】:

我需要根据嵌套属性过滤我的索引:

myNestedProperty: [
   { id: 1, displayName: toto },
   { id: 2, displayName: tata },
   { id: 3, displayName: titi }
]

myNestedProperty: [
   { id: 4, displayName: dodo },
   { id: 5, displayName: dada },
   { id: 6, displayName: didi }
]

我想数一下有多少人有托托,有多少人没有。我尝试使用以下查询:

"aggs": {
"HasToto": {
  "filter": {
    "nested": {
      "path": "myNestedProperty",
      "query": {
        "match": {
          "myNestedProperty.id": "1"
        }
      } 
    }
  }
},
"NoToto": {
  "filter": {
    "nested": {
      "path": "myNestedProperty",
      "query": {
        "bool": {
          "must_not": [
            {"match": {
          "myNestedProperty.id": "1"
        }}
          ]
        } 
      } 
    }
  }
 }
}

“HasToto”似乎返回了预期的结果,但“NoToto”过滤器的情况并非如此(返回的数据过多)。

规则: “Toto”只能在 myNestedProperty 中出现一次。如果我有“Toto”,我就不能有“Dodo”或另一个。 这是一个分层对象:
-- 多多
---- 塔塔
-------- 蒂蒂

由于数据的复杂性,我对其进行了简化,我希望这个简单的对象足够清晰。

请问如何实现?提前致谢。

【问题讨论】:

  • 您想要计算属性(如在具有 id=1 的对象中)或在 id=1 的数组中具有对象的文档。
  • 计数“HasToto”工作正常,我的问题是 must_not。我需要计算不需要的文件

标签: elasticsearch filter nested elasticsearch-aggregation


【解决方案1】:

我找到了解决办法\o/

"aggs": {
"HasToto": {
  "filter": {
    "bool": {
      "must": {
        "nested": {
      "path": "myNestedProperty",
      "query": {
        "match": {
          "myNestedProperty.id": "1"
        }
      } 
    }
      }
    }}
},
"NoToto": {
  "filter": {
      "bool": {
          "must_not": [
            {
              "nested": {
                  "path": "myNestedProperty",
                  "query": {
                    "match": {
                        "myNestedProperty.id": "1"
                    }
                  }
                }
              }
          ]
      } 
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多