做钢丝绳外贸的网站,wordpress调用文章内容,高端h5手机网站设计案例,自助网站建设软件Elastic字段映射#xff08;_source,doc_value,filed_data,index,store#xff09;
_source#xff1a;
source 字段用于存储 post 到 ES 的原始 json 文档。为什么要存储原始文档呢#xff1f;因为 ES 采用倒排索引对文本进行搜索#xff0c;而倒排索引无法存储原始输入…Elastic字段映射_source,doc_value,filed_data,index,store
_source
source 字段用于存储 post 到 ES 的原始 json 文档。为什么要存储原始文档呢因为 ES 采用倒排索引对文本进行搜索而倒排索引无法存储原始输入文本。一段文本交给ES后首先会被分析器(analyzer)打散成单词为了保证搜索的准确性在打散的过程中会去除文本中的标点符号统一文本的大小写甚至对于英文等主流语言会把发生形式变化的单词恢复成原型或词根然后再根据统一规整之后的单词建立倒排索引经过如此一番处理原文已经面目全非。因此需要有一个地方来存储原始的信息以便在搜到这个文档时能够把原文返回给查询者。
相对于store,它只要建立一个文档索引当需要对多个字段进行查询的时候只需要一次io。
那么一定要存储原始文档吗不一定如果没有取出整个原始 json 结构体的需求可以在 mapping 中关闭 source 字段或者只在 source 中存储部分字段使用store,关闭后能减少内存和数据大小提高性能。 但是这样做有些负面影响
1不能获取到原文2无法reindex如果存储了 source当 index 发生损坏或需要改变 mapping 结构时由于存在原始数据ES可以通过原始数据自动重建index如果不存 source 则无法实现3无法在查询中使用script因为 script 需要访问 source 中的字段文档需要使用update或者update_by_query更新文档高亮有store也可以
可以通过在查询的时候进行过滤
//查询
GET index/_search
{_source: [field],query : {match_all: {}}
}
//设置
{
settings : {mappings : {_source: {enable: true,excludes: [],includes: []}}}
}doc_value
DocValue其实是Lucene在构建倒排索引时会额外建立一个有序的正排索引基于document field value的映射列表。 它是一个列式存储。不能用在text类型的字段。 因为倒排索引不能进行排序和聚合因此如果字段需要这两个功能就可以开启它。 缺点有额外的磁盘消耗
//查询
GET index/_search
{doc_value: [field],query : {match_all: {}}
}
//设置
{
settings : {mappings : {properties: {content: {doc_value: true // 默认开启},}}}
}fielddata
fielddata 也是用来进行聚合操作的但是他是针对text的算是对doc_value的一个补充。 fielddata 不是临时缓存。它是驻留内存里的数据结构必须可以快速执行访问而且构建它的代价十分高昂。如果每个请求都重载数据性能会十分糟糕
在使用这个的过程中 应该好好思考两个问题“
为什么要对text类型的字段进行聚合操作如果你真想对这个字段进行聚合为什么不将他设置为keyword类型使用doc_value
index
Index定义字段分词以及创建索引只有建立索引才能被检索。缺点会额外维护一个索引库 关闭后字段不建立索引不被检索无法通过检索查询到该字段。反过来有些业务要求某些字段不能被搜索那么index属性设置为false即可。
store
store开启后 ES会对该字段单独存储倒排索引每次根据ID检索的时候会多走一次IO来从倒排索引取数据以便于快速检索。
注意:如果想要对某个字段实现高亮功能_source和store至少保留一个。
一般来说_source和store 只要开启一个就行。因为如果_source存在的话他可以直接在_source检索出来。
store默认是关闭的它开启的字段越多索引库就越大维护的成本就越高检索的效率也就会会越差、