Mapping简介
mapping 是用来定义文档及其字段的存储方式、索引方式的手段,例如利用mapping 来定义以下内容:
- 哪些字段需要被定义为全文检索类型
- 哪些字段包含number、date类型等
- 格式化时间格式
-
Mapping Type
每个索引都拥有唯一的 mapping type,用来决定文档将如何被索引。mapping type由下面两部分组成
Meta-fields
元字段用于自定义如何处理文档的相关元数据。 元字段的示例包括文档的_index,_type,_id和_source字段。Fields or properties
映射类型包含与文档相关的字段或属性的列表。分词器最佳实践
因为后续的keyword和text设计分词问题,这里给出分词最佳实践。即索引时用ik_max_word,搜索时分词器用ik_smart,这样索引时最大化的将内容分词,搜索时更精确的搜索到想要的结果。
例如我想搜索的是小米手机,我此时的想法是想搜索出小米手机的商品,而不是小米音响、小米洗衣机等其他产品,也就是说商品信息中必须只有小米手机这个词。
我们后续会使用”search_analyzer”: “ik_smart”来实现这样的需求。字段类型
一种简单的数据类型,例如text、keyword、double、boolean、long、date、ip类型。
- 也可以是一种分层的json对象(支持属性嵌套)。
- 也可以是一些不常用的特殊类型,例如geo_point、geo_shape、completion
针对同一字段支持多种字段类型可以更好地满足我们的搜索需求,例如一个string类型的字段可以设置为text来支持全文检索,与此同时也可以让这个字段拥有keyword类型来做排序和聚合,另外我们也可以为字段单独配置分词方式,例如”analyzer”: “ik_max_word”,
text 类型
text类型的字段用来做全文检索,例如邮件的主题、淘宝京东中商品的描述等。这种字段在被索引存储前先进行分词,存储的是分词后的结果,而不是完整的字段。text字段不适合做排序和聚合。如果是一些结构化字段,分词后无意义的字段建议使用keyword类型,例如邮箱地址、主机名、商品标签等。
常有参数包含以下
- analyzer:用来分词,包含索引存储阶段和搜索阶段(其中查询阶段可以被search_analyzer参数覆盖),该参数默认设置为index的analyzer设置或者standard analyzer
- index:是否可以被搜索到。默认是true
- fields:Multi-fields允许同一个字符串值同时被不同的方式索引,例如用不同的analyzer使一个field用来排序和聚类,另一个同样的string用来分析和全文检索。下面会做详细的说明
- search_analyzer:这个字段用来指定搜索阶段时使用的分词器,默认使用analyzer的设置
- search_quote_analyzer:搜索遇到短语时使用的分词器,默认使用search_analyzer的设置
原文参考链接https://www.cnblogs.com/haixiang/p/12040272.html#3348742009