【问题标题】:Apply search on field1 if exists and Ingnoring field2 else search on field2 elastic search如果存在,则在 field1 上应用搜索,并在 field2 上应用搜索,否则在 field2 弹性搜索上搜索
【发布时间】:2020-09-22 13:03:27
【问题描述】:

索引中有两个字段。让我们假设为 field1 和 field2。

  • 搜索案例

    • 两者都可能出现
    • field1 或 field2 可能存在
    • fields1 和 field2 可能存在

在这里我必须创建一个类似的查询

  • 如果 field1 存在,则对其应用搜索并忽略 field2
  • 如果 field1 不存在,则在 field2 上应用搜索
  • 如果两者都存在,则仅在字段 1 上应用搜索,忽略字段 2

谁能帮忙查询

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    我认为您正在寻找的是 1 should 由 3 musts 组成:

    GET conditionals/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "exists": {
                      "field": "field1"
                    }
                  },
                  {
                    "match": {
                      "field1": "abc"
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "must": [
                  {
                    "bool": {
                      "must_not": [
                        {
                          "exists": {
                            "field": "field1"
                          }
                        }
                      ]
                    }
                  },
                  {
                    "match": {
                      "field2": "xyz"
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "must": [
                  {
                    "bool": {
                      "must": [
                        {
                          "exists": {
                            "field": "field1"
                          }
                        },
                        {
                          "exists": {
                            "field": "field2"
                          }
                        }
                      ]
                    }
                  },
                  {
                    "match": {
                      "field2": "xyz"
                    }
                  }
                ]
              }
            }
          ],
          "minimum_should_match": 1
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 2018-10-26
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多