Elasticsearch在2个字段的查询之间

s8vozzvw  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(97)

我想用3 bedrooms查询ElasticSearch(下面的数据),并期望输出返回id:20,21,22,23,24,25。

|   id   | bedrooms_min | bedrooms_max |
________________________________________
|   20   |       1      |       4      |
|   21   |       1      |       3      |
|   22   |       3      |       4      |
|   23   |       2      |       3      |
|   24   |       3      |       3      |
|   25   |       2      |       5      |
|   26   |       4      |       5      |
|   27   |       1      |       1      |
|   28   |       1      |       2      |
|   29   |       2      |       2      |
________________________________________

因为:

  1. ID 20:3在1和4之间。
  2. ID 21:bedrooms_max等于3。
  3. ID 22:bedrooms_min等于3。
  4. ID 23:bedrooms_max等于3。
  5. ID 24:bedrooms_min = bedrooms_max = 3
  6. ID 25:3在2和5之间。
  7. ID 26:3超出范围
    我正在寻找的BETWEEN查询!
    有可能吗?到目前为止,我尝试了multi_match查询,但它没有给我ID:20和25,我怀疑这个结果集可以用multi-match查询来实现。
6bc51xsx

6bc51xsx1#

我认为下面的查询可以做到这一点。它所做的基本上是找到所有具有bedrooms_min <= 3 AND bedrooms_max >= 3的文档,这是你所期望的:

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "bedrooms_min": {
              "lte": 3
            }
          }
        },
        {
          "range": {
            "bedrooms_max": {
              "gte": 3
            }
          }
        }
      ]
    }
  }
}

一个更好的解决方案是将您的卧室建模为integer_range field,以便您可以在其上运行simple intersecting range query

相关问题