ruby-on-rails - Elasticsearch 6.3.2术语匹配空数组 “plus”其他

标签 ruby-on-rails elasticsearch elasticsearch-rails elasticsearch-ruby

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

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

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

而且效果很好,我有期望的记录。但是问题出在我想包括那些帖子,其中类别是一个空数组([])的时候。

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

我尝试过更改映射,添加著名的"null_value": "NULL",然后进行查询,但是没有用。
还尝试了应将must与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和3号帖子-具有“新闻”,“电视”或空数组作为类别的帖子。

最佳答案

可以使用exists中的must_not复制丢失的内容。您必须修改查询,如下所示:

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

您可以阅读有关here的信息。

关于ruby-on-rails - Elasticsearch 6.3.2术语匹配空数组 “plus”其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051895/

相关文章:

elasticsearch - 如何在Elasticsearch中仅删除索引中的某些事件?

docker - 在$ PATH中找不到Docker Elasticsearch 1.7可执行文件”

ruby-on-rails - 如何根据使用Rails的Elastic搜索中的用户选择来提高特定搜索结果的排名

ruby-on-rails - Heroku-18 堆栈升级后无法部署我的 Rails 项目

ruby-on-rails - Rails 3 中的多个路由文件

css - Rails 4 - 合并供应商 Assets

ruby-on-rails - 如何在Elasticsearch中搜索多代

ruby-on-rails - 将 HTML 输入标记转换为 Rails erb 模板

c# - 使用NEST的Elasticsearch-无结果

ruby-on-rails - Elasticsearch 同义词-Rails