elasticsearch索引index之mapping实现关系结构示例-mile米乐体育
目录
- mapping的实现关系结构
- mapper的三类
- parse方法
- 部分field
- 总结
mapping的实现关系结构
lucene索引的一个特点就filed,索引以field组合。这一特点为索引和搜索提供了很大的灵活性。elasticsearch则在lucene的基础上更近一步,它可以是 no scheme。实现这一功能的秘密就mapping。mapping是对索引各个字段的一种预设,包括索引与分词方式,是否存储等,数据根据字段名在mapping中找到对应的配置,建立索引。这里将对mapping的实现结构简单分析,mapping的放置、更新、应用会在后面的索引fenx中进行说明。
这只是mapping中的一部分内容。mapping扩展了lucene的filed,定义了更多的field类型既有lucene所拥有的string,number等字段又有date,ip,byte及geo的相关字段,这也是es的强大之处。如上图所示,可以分为两类,mapper与documentmapper,前者是所有mapper的父接口。而documentmapper则是mapper的集合,它代表了一个索引的mapper定义。
mapper的三类
第一类就是核心field结构filemapper—>abstractfieldmapper—>stringfield这种核心数据类型,它代表了一类数据类型,如字符串类型,int类型这种;
第二类是mapper—>objectmapper—>rootobjectmapper,object类型的mapper,这也是elasticsearch对lucene的一大改进,不想lucene之支持基本数据类型;
最后一类是mapper—>rootmapper—>indexfieldmapper这种类型,只存在于根mapper中的一种mapper,如idfieldmapper及图上的indexfieldm if (source.source() != null && source.source().length() == 0) { throw new mapperparsingexception("failed to parse, document is empty"); } throw new mapperparsingexception("failed to parse", e); } finally { // only close the parser when its not provided externally if (source.parser() == null && parser != null) { parser.close(); } } // reverse the order of docs for nested docs support, parent should be last if (context.docs().size() > 1) { collections.reverse(context.docs()); } // apply doc boost if (context.docboost() != 1.0f) { set<string> encounteredfields = sets.newhashset(); for (parsecontext.document doc : context.docs()) { encounteredfields.clear(); for (indexablefield field : doc) { if (field.fieldtype().indexed() && !field.fieldtype().omitnorms()) { if (!encounteredfields.contains(field.name())) { ((field) field).setboost(context.docboost() * field.boost()); encounteredfields.add(field.name()); } } } } } parseddocument doc = new parseddocument(context.uid(), context.version(), context.id(), context.type(), source.routing(), source.timestamp(), source.ttl(), context.docs(), context.analyzer(), context.source(), context.mappingsmodified()).parent(source.parent()); // reset the context to free up memory context.reset(null, null, null, null); return doc; }
将整条数据解析成parseddocument,解析后的数据才能进行后面的field解析建立索引。
总结
以上就是mapping的结构和相关功能概括,mapper赋予了elasticsearch索引的更强大功能,使得索引和搜索可以支持更多数据类型,灵活性更高,更多关于elasticsearch索引index mapping关系结构的资料请关注mile米乐体育其它相关文章!