【Elasticsearch】doc_values

 要在现有的Elasticsearch索引中启用`doc_values`,需要注意的是,直接修改现有索引的映射(mapping)是不可能的,因为一旦创建了索引及其映射后,大部分设置都是不可变的。不过,有几种方法可以实现你的目标:

 

### 方法1:重新索引数据

 

最常见和推荐的方法是创建一个新的索引,并在其中为所需字段开启`doc_values`,然后将现有索引的数据重新索引到新索引中。

 

1. **创建新索引**:首先,你需要根据旧索引的映射创建一个新索引,并确保你想要使用`doc_values`的字段在其映射中明确设置了`"doc_values": true`。如果原本没有禁用`doc_values`,则不需要显式设置此参数,因为它是默认开启的(除了`text`类型的字段)。

 

   ```json

   PUT /new_index_name

   {

     "mappings": {

       "properties": {

         "your_field_name": {

           "type": "keyword",

           "doc_va

### Elasticsearch 中 `doc_values` 的功能和用法 #### 功能概述 `doc_values` 是一种基于磁盘的数据结构,它在文档索引时被创建并存储于磁盘上。这种数据结构允许 Elasticsearch 更高效地处理排序、聚合以及其他需要频繁访问字段值的操作[^3]。 #### 原理分析 当文档被索引到 Elasticsearch 时,其内容会被解析成倒排索引以便快速检索匹配条件的文档。然而,对于某些场景(如排序或聚合),仅依赖倒排索引并不够高效。因此,Elasticsearch 提供了 `doc_values` 这一机制。`doc_values` 将字段值以列式存储的形式保存下来,使得这些值可以被快速读取而无需重新解析 `_source` 字段的内容[^4]。 #### 支持的字段类型 几乎所有的字段类型都支持 `doc_values`,但有一些例外情况需要注意: - **不支持的字段类型**:`text` 和 `annotated_text` 类型的字段默认不会启用 `doc_values`,因为这类字段通常经过分词处理,不适合用于排序或聚合操作。 - **其他字段类型**:诸如数值型、日期型、布尔型以及未分词字符串类型的字段均支持 `doc_values`[^1]。 #### 如何验证字段是否启用了 `doc_values` 为了确认某个字段是否已经成功启用了 `doc_values`,可以通过检查索引的映射配置来完成此任务。具体方法如下所示: ```json GET /<index_name>/_mapping ``` 返回的结果中,如果目标字段定义部分存在 `"doc_values": true` 属性,则表明该字段已启用 `doc_values`。 #### 应用实例 假设有一个包含销售记录的索引,其中有一名为 `price` 的数值字段表示商品价格。当我们对该字段执行范围查询或者按价格区间进行统计汇总时,Elasticsearch 很可能会利用 `doc_values` 来加速此类操作[^2]。 下面是一个简单的聚合示例代码片段: ```json POST /sales/_search { "size": 0, "aggs": { "prices_histogram": { "histogram": { "field": "price", "interval": 10 } } } } ``` 在此请求中,由于涉及到对 `price` 字段的计算操作,所以系统会优先考虑通过 `doc_values` 获取所需数据而非直接加载整个 `_source` 内容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值