elasticsearch筛选器-和/或行为

5t7ly7z5  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(348)

我在这个查询中搜索所有匹配的文档 type: location 然后使用精确匹配对结果应用过滤器 postalCode 以及 countryCode 但是一个前缀 address .
过滤器工作正常,表现为 AND 条件,即所有3个匹配项。如何实现 OR 过滤器的状况?与 OR 条件-即使一个筛选器匹配,它也应该返回结果。
elasticsearch 7.9版

GET index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "type": "location"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "postalCode": "12345"
          }
        },
        {
          "prefix": {
            "address": "555"
          }
        },
        {
          "term": {
            "countryCode": "US"
          }
        }
      ]
    }
  }
}
a0zr77ik

a0zr77ik1#

你可以用bool的组合 should 中的子句 filter 条款。
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:

{
  "postalCode": "12345",
  "address": "555",
  "countryCode": "US",
  "type":"location"
}
{
  "postalCode": "9",
  "address": "555",
  "countryCode": "US",
  "type":"location"
}
{
  "postalCode": "9",
  "address": "4",
  "countryCode": "US",
  "type":"location"
}
{
  "postalCode": "9",
  "address": "4",
  "countryCode": "AK",
  "type":"location"
}

搜索查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "type": "location"
          }
        }
      ],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "postalCode": "12345"
                }
              },
              {
                "prefix": {
                  "address": "555"
                }
              },
              {
                "term": {
                  "countryCode.keyword": "US"
                }
              }
            ],
            "minimum_should_match":1
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65192559",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.10536051,
        "_source": {
          "postalCode": "9",
          "address": "555",
          "countryCode": "US",
          "type": "location"
        }
      },
      {
        "_index": "65192559",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.10536051,
        "_source": {
          "postalCode": "12345",
          "address": "555",
          "countryCode": "US",
          "type": "location"
        }
      },
      {
        "_index": "65192559",
        "_type": "_doc",
        "_id": "3",
        "_score": 0.10536051,
        "_source": {
          "postalCode": "9",
          "address": "4",
          "countryCode": "US",
          "type": "location"
        }
      }
    ]

相关问题