过滤一些没有嵌套的子对象

时间:2018-11-27 12:05:23

标签: elasticsearch

我要匹配同一子{ sale: true, name: "book1" }中的两个字段,但是ES给出所有单独的匹配数据,这是文档:

[
  {
    "store": "storeA",
    "books": [
      { // should only matched
        "sale": true,
        "name": "book1",
        "price": 2,
      },
    ]
  },
  {
    "store": "storeB",
    "books": [
      {
        "sale": false,
        "name": "book1",
        "price": 2,
      },
      {
        "sale": true,
        "name": "book2",
        "price": 3,
      },
    ]
  }
]

这是查询,结果只能是一个storeA,但有两个存储。

{
    "query": {
        "bool": {
            "must": [ 
                { "match": { sale: true } },
                { "match": { name: "book1" } }
            ]
        }
    }
}

任何人都可以给我一些建议吗? 抱歉,books字段不是nested类型,我无法更改该映射类型。

2 个答案:

答案 0 :(得分:1)

您可以将其用于聚合,如下所示:

HttpContext.Current.Request.Cookies[CookieName];

希望这可以为您提供帮助。或者,您可以参考:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html#search-aggregations-bucket-filter-aggregation

答案 1 :(得分:1)

如果您拥有name类型的keyword,则可以使用下面的script query

如果您的文本和您没有其关键字twin(name.keyword),那么恐怕您需要引入其{{1 }}以使下面的查询起作用。 (映射更改)

对于现有的keyword字段,您也可以使用"fielddata":true,但首先不建议这样做,然后再次需要更新映射。

book

让我知道是否有帮助!