Elasticsearch 显式Mapping设置与常见参数介绍 电脑版发表于:2020/10/15 16:26 ![elasticsearch](https://img.tnblog.net/arcimg/hb/5f1adabe8df94fdb8331eb80e393c4a3.jpeg "elasticsearch") >#Elasticsearch 显式Mapping设置与常见参数介绍 [TOC] 如何显示的定义一个Mapping ------------ ```bash Put movies { "mappings" { //define your mappings here } } ``` 自定义Mapping的一些建议 ------------ >- 可以参考 API 手册,纯手写 - 为了减少输入的工作量,减少出错概率,可以依照以下步骤 - 创建一个临时的 index,写入一些样本数据 - 通过访问 Mapping API 获得该临时文件的动态Mapping定义 - 修改后用,使用该配置创建你的索引 - 删除临时索引 控制当前字段是否被索引 ------------ tn>index -控制当前字段是否被索引。默认为true。如果设置成false,该字段不可被搜索。举例,这里不允许mobile字段被索引。 ```bash PUT users { mappings: { "properties": { "firstName": { "type": "text" }, "lastName": { "type": "text" }, "mobile": { "type": "text", "index": false } } } } ``` index Options ------------ ```bash PUT users { mappings: { "properties": { "firstName": { "type": "text" }, "lastName": { "type": "text" }, "mobile": { "type": "text", "index": false }, "bio": { "type": "text", "index_options": "offsets" } } } } ``` tn> 四种不同级别的 Index Options 配置,可以控制倒排索引记录的内容 | | | | ------------ | ------------ | | docs | 记录 doc id | | freqs | 记录 doc id 和 term frequencies | | positions | 记录 doc id / term frequencies / term position | | offsets | doc id /term frequencies / term posistion / character offects | tn>Text 类型默认记录 postions,其他默认为 docs 需要注意的是:记录内容越多,占用存储空间越大 关于Null_value ------------ tn>当我们需要对Null值实现搜索时我们可以这样做 ```bash PUT users { mappings: { "properties": { "name": { "type": "text" }, "mobile": { "type": "keyword", "null_value": "NULL" } } } } #查询出数据 GET users/_search?q=mobile:NULL ``` tn>只有Keyword类型支持设定 Null_Value Copy_to 设置 ------------ ```bash PUT users { mappings: { "properties": { "firstName": { "type": "text", "copy_to": "fullName" }, "lastName": { "type": "text", "copy_to": "fullName" } } } } #查询 Get users/_search?q=fullName:(Bob He) ``` >- _all 在 7 中被 copy_to 所替代 - 满足一些特定的搜索需要 - copy_to 将字段的数值拷贝到目标字段,实现类似_all的作用 - copy_to 的目标字段(fullName)不出现在_source中 数组类型 ------------ tn>Elasticsearch中不提供专门的数组类型。但是任何字段,都可以包含多个相同类型的数值 ```bash Put users/_doc/1 { "name":"onebird", "iinterests":"reading" } Put users/_doc/2 { "name": "twobirds", "interests":["reading","music"] } ```