【问题标题】:need to upgrade from AND, OR filters on elasticsearch to boolean queries for ES7需要从 Elasticsearch 上的 AND、OR 过滤器升级为 ES7 的布尔查询
【发布时间】:2021-09-08 02:14:59
【问题描述】:

我正在尝试更新在 ElasticSearch 2 上可能存在但在 ES7 中不存在的查询。 下面是这个查询:

{
"filter":
  {
  "and":[
     {
      "or":[
        { 
         "range":
          {
           "date_of_birth":
             {
             "lte": 5
             }
           }
         },
          {
           "range":
              {
              "age":{
                   "gte": 15
                    }
              }
            }]
       },{
         "range":
          {
            "begin_time":
              {
               "lte": 23
              }
           }
        }]
    } 
}            

我知道我应该使用布尔查询,但因为它是一个过滤器,所以我很困惑,我会很感激你的帮助 :)

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl booleanquery


    【解决方案1】:

    好了,只需将and 替换为bool/filteror 替换为bool/should

    {
      "query": {
        "bool": {
          "filter": [
            {
              "bool": {
                "should": [
                  {
                    "range": {
                      "date_of_birth": {
                        "lte": 5
                      }
                    }
                  },
                  {
                    "range": {
                      "age": {
                        "gte": 15
                      }
                    }
                  }
                ]
              }
            },
            {
              "range": {
                "begin_time": {
                  "lte": 23
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 谢谢瓦尔,我明白了!但是这些查询对评分有影响吗?
    • 如果你想得分,那么你需要将filter替换为must,否则你可以保留filter。但是由于您没有进行任何全文搜索,因此您的约束基本上只是是/否约束,而不是“我的文档匹配程度如何”。
    • 正是我需要理解的,感谢您的快速回复:)
    • 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多