https://www.elastic.co/guide/cn/elasticsearch/guide/current/custom-dynamic-mapping.html
如果你想在运行时增加新的字段,你可能会启用动态映射。 然而,有时候,动态映射 规则 可能不太智能。幸运的是,我们可以通过设置去自定义这些规则,以便更好的适用于你的数据。
日期检测
当 Elasticsearch 遇到一个新的字符串字段时,它会检测这个字段是否包含一个可识别的日期,比如 2014-01-01 。 如果它像日期,这个字段就会被作为 date 类型添加。否则,它会被作为 string 类型添加。
有些时候这个行为可能导致一些问题。想象下,你有如下这样的一个文档:
{ "note": "2014-01-01" }
假设这是第一次识别 note 字段,它会被添加为 date 字段。但是如果下一个文档像这样:
{ "note": "Logged out" }
这显然不是一个日期,但为时已晚。这个字段已经是一个日期类型,这个 不合法的日期 将会造成一个异常。
日期检测可以通过在根对象上设置 date_detection 为 false 来关闭:

PUT /my_index
{
"mappings": {
"my_type": {
"date_detection": false
}
}
}

使用这个映射,字符串将始终作为 string 类型。如果你需要一个 date 字段,你必须手动添加。
Elasticsearch 判断字符串为日期的规则可以通过 dynamic_date_formats setting 来设置。

动态模板
使用 dynamic_templates ,你可以完全控制 新检测生成字段的映射。你甚至可以通过字段名称或数据类型来应用不同的映射。
每个模板都有一个名称, 你可以用来描述这个模板的用途, 一个 mapping 来指定映射应该怎样使用,以及至少一个参数 (如 match) 来定义这个模板适用于哪个字段。
模板按照顺序来检测;第一个匹配的模板会被启用。例如,我们给 string 类型字段定义两个模板:
es :以 _es 结尾的字段名需要使用 spanish 分词器。
en :所有其他字段使用 english 分词器。
我们将 es 模板放在第一位,因为它比匹配所有字符串字段的 en 模板更特殊:

PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{ "es": {
"match": "*_es",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "spanish"
}
}},
{ "en": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "english"
}
}}
]
}}}

1.匹配字段名以 _es 结尾的字段。
2.匹配其他所有字符串类型字段。
match_mapping_type 允许你应用模板到特定类型的字段上,就像有标准动态映射规则检测的一样, (例如 string 或 long)。
match 参数只匹配字段名称, path_match 参数匹配字段在对象上的完整路径,所以 address.*.name 将匹配这样的字段:

{
"address": {
"city": {
"name": "New York"
}
}
}

最新文章

  1. 代码片段添加智能提示,打造一款人见人爱的ORM框架
  2. 各大互联网公司前端面试题(HTML/CSS)
  3. java类初始化的过程
  4. Solr5 DataImport 处理1对多关系
  5. HDU 4320 Arcane Numbers 1 (质因子分解)
  6. C++成员变量内存对齐问题,ndk下非对齐的内存访问导致BUS_ADRALN
  7. (POJ 3026) Borg Maze 最小生成树+bfs
  8. VM Depot 登陆中国!
  9. (转) Class
  10. solr6环境搭建
  11. COM组件
  12. 传统 HTML 表单数据的“整存整取”
  13. Java读取word中表格
  14. vue实现购物车和地址选配
  15. 字节缓冲流 BufferedOutputStream BufferedInputStream
  16. php 当前时间 当前时间戳和数据库里取出的时间datetime格式进行比较大小
  17. Linux:TCP状态/半关闭/2MSL/端口复用
  18. 复刻smartbits的国产网络测试工具minismb-如何添加数据流
  19. OpenGL中的帧缓存
  20. Make ISO安装ArchLinux加Cinnamon

热门文章

  1. JVM性能优化--类加载器,手动实现类的热加载
  2. kvm第五章--虚拟迁移
  3. VBA数组(十四)
  4. idea 实用插件
  5. CSS之属相相关
  6. 记录一下JProfiler的使用
  7. Google的三大马车
  8. MySQL服务器
  9. java程序报错:Unable to open debugger port (127.0.0.1:63959): java.net.SocketException "socket closed",编译过来就是无法打开调试器端口,套接字已关闭
  10. virtual box启动error