1

在我的数据库中,帖子可以有零 (0) 个或多个类别表示为一个数组。

当我进行查询时,要查看这些类别,并传递一些值:

{
  "query": {
    "bool": {
      "should": {
        "terms": {
          "categories": ["First", "Second", "And so on"]
        }
      }
    }
  }
}

而且效果很好,我有我期待的记录。但是当我想包含这些帖子时问题就来了,其中类别是一个空数组([])。

我现在正在从旧版本的 ES (1.4.5) 升级到版本 6.3.2,并且这段代码是使用“missing”制作的,它已被弃用。

我尝试更改添加着名的映射"null_value": "NULL",然后查询,但没有奏效。还尝试了 should 与 must_not 的组合,如升级“missing”的建议,但没有奏效。

我怎样才能做到这一点?这意味着如果我已编制索引:

Post.new(id: 1, title: '1st', categories: [])
Post.new(id: 2, title: '2nd', categories: ['news', 'tv'])
Post.new(id: 3, title: '3rd', categories: ['tv', 'trending'])
Post.new(id: 4, title: '4th', categories: ['movies'])
Post.new(id: 5, title: '5th', categories: ['technology', 'music'])

结果应返回帖子编号 1、2 y 3 - 具有“新闻”、“电视”或空数组作为类别的帖子。

4

1 回答 1

5

可以使用existsinside复制缺失的内容must_not。您必须修改查询如下:

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "categories": [
              "First",
              "Second",
              "And so on"
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "categories"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

你可以在这里阅读。

于 2019-05-09T04:41:53.887 回答