过滤elasticsearch嵌套模型

时间:2016-06-08 01:48:24

标签: elasticsearch

我有Product模型和Sku模型,Product有多个Skus

在elasticsearch中,我可以使用Products定价过滤Sku,并使用如此结构的查询:

query:
  bool:
    must: [
      nested:
        path: 'skus'
        query:
          bool:
            must: [
              range:
                baseline_price:
                  gte: opts.min_price
                  lte: opts.max_price
            ]
    ]

但是,我在length模型上对widthheightSku值进行类似操作时遇到了问题。

我想找到所有Skuslengthwidthheight的{​​{1}}。我尝试过这样的事情:

query:
  bool:
    must: [
      nested:
        path: 'skus'
        query:
          bool:
            should: [
              exists: { field: 'length' }
              exists: { field: 'width' }
              exists: { field: 'height' }
            ]
    ]

只是为了返回任何有用的东西,但任何组合都会引发错误。在上面的情况中,它会抛出No query registered for [exists]

我已查看了documentation for null values in elasticsearch,但仍然没有运气。

我该如何撰写此查询?

1 个答案:

答案 0 :(得分:0)

我能够让它有点像这样:

query:
  bool:
    must: [
      nested:
        path: 'skus'
        query:
          constant_score:
            filter:
              bool:
                must: [
                  missing: { field: 'skus.width' }
                ]
    ]

这会发现Skus缺少width。但是,不幸的是,添加其他lengthheight字段的行为与OR不同,而不是AND,我不确定这是弹性搜索的错误还是不

这足以满足我们现在的需求,但仍不确定是否有办法过滤多个缺失的字段。