Update By Query
_update_by_query
适用场景:索引mappings有更新,通过使用_update_by_query可以查询到mappings更新之前的文档。
POST /blogs/_update_by_query
{
}
reindex
ES不允许对已有的索引mappings进行更改,可以重新创建一个索引
然后用reindex操作将原有的索引数据导入都新的索引中。reindex可以将一个索引拷贝到另一个索引中。
POST _reindex
{
"source": {
"index": "blogs"
},
"dest": {
"index": "blogs_fix",
"version_type": "internal"
}
}
数据建模
数据建模就是创建数据模型的过程
过程:
字段类型–>是否要搜索分词–>是否要聚合及排序–>是否要额外存储
字段类型
- text
- 用于全文本字段,文本不会被Analyzer分词
- 默认不支持聚合和排序,需要将fielddata设置为true
- keyword
- 用于ID,枚举及不需要分词的文本
- 适用于Filter精确匹配,Sorting和Aggregations
- 设置多字段类型
- 默认会为文本类型设置成text,并且设置一个keyword的子字段
- 在处理人类语言时,通过增加英文,拼音和标准分词器,提高搜索结构
检索
- 如不需要检索,排序和聚合分析
- Enable设置成false
- 如不需要检索
- index设置fasle
排序和聚合
- 如不需要检索,排序和聚合分析
- Enable设置成false
- 如不需要排序或者聚合分析功能
- doc_values/fielddata设置成false
- 更新频繁,聚合查询频繁的keyword类型的字段
- 推荐将eager_global_ordinals设置为true,利用缓存
额外的存储
- 是否需要专门存储当前字段数据
- store设置成true,可以存储该字段的原始内容
- 一般结合_source的enable为false时候使用
- Disable_source:节约磁盘,适用于指标型数据
- 建议先考虑增加压缩比
- 无法看到_source字段,无法做reindex,无法做update
建模建议
- 避免过多字段,默认最大字段数是1000