范围字段类型
编辑范围字段类型编辑
范围字段类型表示上限和下限之间的连续值范围。例如,范围可以表示*10 月份的任何日期*或*0 到 9 之间的任何整数*。它们使用运算符 gt
或 gte
定义下限,使用 lt
或 lte
定义上限。它们可用于查询,并对聚合提供有限的支持。唯一支持的聚合是 直方图、基数。
支持以下范围类型
|
一个有符号 32 位整数范围,最小值为 |
|
一个单精度 32 位 IEEE 754 浮点值范围。 |
|
一个有符号 64 位整数范围,最小值为 |
|
一个双精度 64 位 IEEE 754 浮点值范围。 |
|
一个 |
|
下面是一个配置包含各种范围字段的映射的示例,后面是一个索引多个范围类型的示例。
response = client.indices.create( index: 'range_index', body: { settings: { number_of_shards: 2 }, mappings: { properties: { expected_attendees: { type: 'integer_range' }, time_frame: { type: 'date_range', format: 'yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis' } } } } ) puts response response = client.index( index: 'range_index', id: 1, refresh: true, body: { expected_attendees: { gte: 10, lt: 20 }, time_frame: { gte: '2015-10-31 12:00:00', lte: '2015-11-01' } } ) puts response
PUT range_index { "settings": { "number_of_shards": 2 }, "mappings": { "properties": { "expected_attendees": { "type": "integer_range" }, "time_frame": { "type": "date_range", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } } PUT range_index/_doc/1?refresh { "expected_attendees" : { "gte" : 10, "lt" : 20 }, "time_frame" : { "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01" } }
|
|
示例索引一个有 10 到 20 名与会者(不包括 20 名)的会议。 |
|
使用日期时间戳的示例日期范围。 |
以下是在名为“expected_attendees”的 integer_range
字段上进行 词条查询 的示例。12 是范围内的值,因此它将匹配。
response = client.search( index: 'range_index', body: { query: { term: { expected_attendees: { value: 12 } } } } ) puts response
GET range_index/_search { "query" : { "term" : { "expected_attendees" : { "value": 12 } } } }
上述查询产生的结果。
{ "took": 13, "timed_out": false, "_shards" : { "total": 2, "successful": 2, "skipped" : 0, "failed": 0 }, "hits" : { "total" : { "value": 1, "relation": "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "range_index", "_id" : "1", "_score" : 1.0, "_source" : { "expected_attendees" : { "gte" : 10, "lt" : 20 }, "time_frame" : { "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01" } } } ] } }
以下是在名为“time_frame”的 date_range
字段上进行 date_range
查询的示例。
response = client.search( index: 'range_index', body: { query: { range: { time_frame: { gte: '2015-10-31', lte: '2015-11-01', relation: 'within' } } } } ) puts response
GET range_index/_search { "query" : { "range" : { "time_frame" : { "gte" : "2015-10-31", "lte" : "2015-11-01", "relation" : "within" } } } }
此查询产生类似的结果
{ "took": 13, "timed_out": false, "_shards" : { "total": 2, "successful": 2, "skipped" : 0, "failed": 0 }, "hits" : { "total" : { "value": 1, "relation": "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "range_index", "_id" : "1", "_score" : 1.0, "_source" : { "expected_attendees" : { "gte" : 10, "lt" : 20 }, "time_frame" : { "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01" } } } ] } }
IP 范围编辑
除了上述范围格式外,还可以使用 CIDR 表示法提供 IP 范围
response = client.indices.put_mapping( index: 'range_index', body: { properties: { ip_allowlist: { type: 'ip_range' } } } ) puts response response = client.index( index: 'range_index', id: 2, body: { ip_allowlist: '192.168.0.0/16' } ) puts response
PUT range_index/_mapping { "properties": { "ip_allowlist": { "type": "ip_range" } } } PUT range_index/_doc/2 { "ip_allowlist" : "192.168.0.0/16" }