了解 ignore_above 参数对 Elasticsearch 中磁盘使用的影响

在 Elasticsearch 中,ignore_above 参数允许你忽略(而不是索引)长于指定长度的字符串。 这对于限制字段的大小以避免性能问题很有用。 在本文中,我们将探讨 "ignore_above" 参数如何影响 Elasticsearch 中字段的大小,并将比较两个不同的 ignore_above 参数之间的磁盘使用情况。

首先,我们创建一个名为 "test_index" 的索引,其中包含三个字段:"field_ignore_above_4"、"field_ignore_above_256" 和 "field_ignore_above_512"。 每个字段的类型都是 "keyword",并且具有不同的 "ignore_above" 设置:

json 复制代码
1.  PUT test_index
2.  {
3.    "mappings": {
4.      "properties": {
5.         "field_ignore_above_4": {
6.          "type": "keyword",
7.          "ignore_above": 4
8.        },
9.        "field_ignore_above_256": {
10.          "type": "keyword",
11.          "ignore_above": 256
12.        },
13.        "field_ignore_above_512": {
14.          "type": "keyword",
15.          "ignore_above": 512
16.        }
17.      }
18.    }
19.  }

接下来,我们将文档插入到 test_index 中:

bash 复制代码
1.  PUT test_index/_doc/1
2.  {
3.    "field_ignore_above_4": "some value",
4.    "field_ignore_above_256": "some value",
5.    "field_ignore_above_512": "some value"
6.  }

当我们对 "test_index" 执行搜索时,我们可以看到 "field_ignore_above_4" 被忽略,因为它的值超出了 "ignore_above" 限制:

bash 复制代码
GET test_index/_search

响应显示 "field_ignore_above_4" 被忽略。这是因为 "some value" 的字符串长度超过 4。

我们做如下的查询:

bash 复制代码
1.  GET test_index/_search
2.  {
3.    "query": {
4.      "term": {
5.        "field_ignore_above_256": {
6.          "value": "some value"
7.        }
8.      }
9.    }
10.  }

上面显示是有一个文档的。我们如下针对字段 field_ignore_above_4 来做查询:

bash 复制代码
1.  GET test_index/_search
2.  {
3.    "query": {
4.      "term": {
5.        "field_ignore_above_4": {
6.          "value": "some value"
7.        }
8.      }
9.    }
10.  }

上面是不显示任何的文档的。这说明这个 field_ignore_above_4 字段确实是被忽略了。

现在,我们可以使用 "_disk_usage" API 计算字段的大小:

ini 复制代码
POST /test_index/_disk_usage?run_expensive_tasks=true&filter_path=**.fields.field*

响应提供有关每个字段大小的详细信息:

json 复制代码
1.  {
2.    "test_index": {
3.      "fields": {
4.        "field_ignore_above_256": {
5.          "total": "30b",
6.          "total_in_bytes": 30,
7.          "inverted_index": {
8.            "total": "19b",
9.            "total_in_bytes": 19
10.          },
11.          "stored_fields": "0b",
12.          "stored_fields_in_bytes": 0,
13.          "doc_values": "11b",
14.          "doc_values_in_bytes": 11,
15.          "points": "0b",
16.          "points_in_bytes": 0,
17.          "norms": "0b",
18.          "norms_in_bytes": 0,
19.          "term_vectors": "0b",
20.          "term_vectors_in_bytes": 0,
21.          "knn_vectors": "0b",
22.          "knn_vectors_in_bytes": 0
23.        },
24.        "field_ignore_above_512": {
25.          "total": "30b",
26.          "total_in_bytes": 30,
27.          "inverted_index": {
28.            "total": "19b",
29.            "total_in_bytes": 19
30.          },
31.          "stored_fields": "0b",
32.          "stored_fields_in_bytes": 0,
33.          "doc_values": "11b",
34.          "doc_values_in_bytes": 11,
35.          "points": "0b",
36.          "points_in_bytes": 0,
37.          "norms": "0b",
38.          "norms_in_bytes": 0,
39.          "term_vectors": "0b",
40.          "term_vectors_in_bytes": 0,
41.          "knn_vectors": "0b",
42.          "knn_vectors_in_bytes": 0
43.        }
44.      }
45.    }
46.  }

从响应中,我们可以看到 field_ignore_above_256 和 field_ignore_above_512 的总大小相同,均为 30 字节。

有趣的是,"field_ignore_above_4" 不包含在磁盘使用统计信息中,因为它在索引过程中由于 "ignore_above" 设置而被忽略。 这演示了如何使用 "ignore_above" 参数来控制字段的大小并优化 Elasticsearch 存储的使用。

相关推荐
Elasticsearch1 小时前
将 Embedding 模型加载到 Elasticsearch 中
elasticsearch
Elasticsearch13 小时前
使用 Elasticsearch open inference API 对 OpenAI chat completions 进行支持
elasticsearch
Linux运维技术栈13 小时前
业务不停机、数据零丢失:Redis / RabbitMQ / Elasticsearch 三大核心中间件升级改造集群无缝平滑迁移
redis·elasticsearch·rabbitmq
Elasticsearch15 小时前
15 行点击跟踪代码,告诉你搜索日志无法揭示的信息
elasticsearch
Elastic 中国社区官方博客16 小时前
Elasticsearch:语义搜索快速入门
大数据·人工智能·elasticsearch·搜索引擎·全文检索
1名持续学习的码农1 天前
GPT Plus、GPT Pro用户第一次用Codex,项目权限和Git分支怎么设置?
人工智能·git·gpt·elasticsearch·ai编程·codex
小罗水1 天前
附录A 各微服务完整 application.yml 配置汇总
数据库·elasticsearch·微服务
Elasticsearch1 天前
使用 Gemma、Hugging Face 和 Elasticsearch 构建 RAG 系统
elasticsearch
Elasticsearch1 天前
使用 NVIDIA NeMo Retriever、Unstructured 和 Elasticsearch 处理非结构化数据
elasticsearch