# Range

原文链接：

[https://www.elastic.co/guide/en/elasticsearch/reference/5.4/range.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/range.html)

译文链接：

[http://www.apache.wiki/pages/editpage.action?pageId=10031152](http://www.apache.wiki/pages/editpage.action?pageId=10031152)

贡献者：

[张学](/display/~zhangxue)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

支持以下范围类型：

| **`integer_range`** | 32位有符号整型数范围。最小值是-231，最大值是`231-1。` |
| **`float_range`** | 单精度32位IEEE 754浮点值范围。 |
| **`long_range`** | 64位有符号整型数范围。最小值是-263，最大值是263`-1。` |
| **`double_range`** | 双精度64位IEEE 754浮点值范围。 |
| **`date_range`** | 以系统纪元经过的无符号64位整数毫秒表示的日期值范围。 |

以下是使用各种范围字段配置映射的示例，后跟跟踪多个范围类型的示例。

```
PUT range_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "expected_attendees": {
          "type": "integer_range"
        },
        "time_frame": {
          "type": "date_range", #1
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        }
      }
    }
  }
}

PUT range_index/my_type/1
{
  "expected_attendees" : { #2
    "gte" : 10,
    "lte" : 20
  },
  "time_frame" : { #3
    "gte" : "2015-10-31 12:00:00", #4
    "lte" : "2015-11-01"
  }
}
```

以下是date_range查询的一个例子，该日期字段名为“time_frame”。

```
POST range_index/_search
{
  "query" : {
    "range" : {
      "time_frame" : { #5
        "gte" : "2015-10-31",
        "lte" : "2015-11-01",
        "relation" : "within" #6
      }
    }
  }
}
```

上述查询产生的结果。

```
{
  "took": 13,
  "timed_out": false,
  "_shards" : {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "range_index",
        "_type" : "my_type",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "expected_attendees" : {
            "gte" : 10, "lte" : 20
          },
          "time_frame" : {
            "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01"
          }
        }
      }
    ]
  }
}
```

| 1 | **date_range**类型接受由日期类型定义的相同字段参数。 |
| 2 | 举办与10至20名与会者的会议举例。 |
| 3 | 日期范围接受与**date range queries**（日期范围查询）中所述相同的格式。 |
| 4 | 示例日期范围使用日期时间戳。 这也接受日期数学格式，或者系统时间的“**now**”。 |
| 5 | **Range queries**（范围查询）与**range query**（范围查询）中所述相同。 |
| 6 | 范围查询范围字段支持一个关系参数，可以是**WITHIN**，**CONTAINS**，**INTERSECTS**（默认）之一。 |

### range字段的参数

**range**字段接受一下参数：

| [`coerce`](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/coerce.html "coerce") | 尝试将字符串转换为数字并截断整数的分数。 接受**true**（默认）和**false**。 |
| [`boost`](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping-boost.html "boost") | 映射字段级查询时间提升。 接受一个浮点数，默认为**1.0**。 |
| [`include_in_all`](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/include-in-all.html "include_in_all") | 字段值是否应包含在**_all**字段中？ 接受**true**或者**false**。 如果**index**设置为**false**，或者如果父对象字段将**include_in_all**设置为**false**，则默认为**false**。 否则默认为**true**。 |
| [`index`](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping-index.html "index") | 应该可以搜索该字段吗？ 接受**true**（默认）和**false**。 |
| [`store`](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/mapping-store.html "store") | 字段值是否应与**_source**字段分开存储和检索。 接受**true**或**false**（默认）。 |