如何实现弹性搜索不过滤?

时间:2016-12-14 00:54:26

标签: ruby-on-rails elasticsearch

我使用弹性搜索版本1.7.5

我从这篇文章中得到了一些想法: Elastic search Not filter inside and filter

下面的查询似乎没有过滤掉与item_category_id相关联的项目.17。是否存在可以看到的语法错误?在not数组内的filters之外定义的术语正常工作。

      {
      query: {
          filtered: {
              filter: {
                  and: {
                      filters: [
                          { not: {
                                  filter: {
                                      terms: {item_category_ids: [17] }
                                  }
                              }
                          },
                          { term: { user_inactive: false } },
                          { term: { kind: 1 } }
                      ]
                  }
              }
          }
      }

2 个答案:

答案 0 :(得分:2)

ES 2.0中的filtered and and/not queries have been deprecated,您应该使用bool/filter/must_not代替:

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "must_not": {
              "terms": {
                "item_category_ids": [
                  17
                ]
              }
            }
          }
        },
        {
          "term": {
            "user_inactive": false
          }
        },
        {
          "term": {
            "kind": 1
          }
        }
      ]
    }
  }
}

对于ES 1.7,您需要将查询更改为:

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must_not": {
            "terms": {
              "item_category_ids": [
                17
              ]
            }
          },
          "must": [
            {
              "term": {
                "user_inactive": false
              }
            },
            {
              "term": {
                "kind": 1
              }
            }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)

这就是我所追求的。

{
      query: {
          filtered: {
              filter: {
                  and: [
                      { terms: { published_posted_community_ids: @community_ids } },
                      { term: { user_inactive: false } },
                      { terms: { kind: 1 } },
                      { not: { terms: { item_category_ids: 17 } } }
                  ]
              }
          }
      }
  }