mapping是类似于数据库中的表结构定义,主要作用如下:

    • 定义index下的字段名
    • 定义字段类型,比如数值型、浮点型、布尔型等
    • 定义倒排索引相关的设置,比如是否索引、记录position等

    查看Mapping:
    通过PUT会自动生成对应的index及其mapping
    image.png

    dynamic参数:mapping中的字段类型一旦设置,禁止直接修改,因为 lucene实现的倒排索引生成后不允许修改,应该重新建立新的索引,然后做reindex操作。
    但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:

    • true:默认值,表示允许选自动新增字段,且可以通过该字段进行分词查询
    • false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
    • strict:严格模式,文档不能写入,报错 ```json PUT my_index { “mappings”: {
      1. "dynamic": false, ##ES7.9版本语法
      2. "properties":{
      3. "title":{"type":"text"},
      4. "name":{"type":"text"},
      5. "age":{"type":"integer"}
      6. }
      } }

    POST my_index/_doc/1 { “title” : “还好hhh” }

    POST my_index/_doc { “title” : “bi看电视剧” }

    POST my_index/_doc { “title” : “bi看电视剧”, “desc”: “哈哈哈哈” ##心中的desc不在原来mapping中定义的字段,如果dynamic设置为false,该条数据可以插入,但是下面查询语句将失效 }

    GET my_index/_search { “query”: { “match”: { “desc”: “哈哈哈” } } }

    1. **copy_to参数:**作用是将该字段的值复制到目标字段,实现类似_all的作用。不会出现在_source中,只能用来搜索。
    2. ```json
    3. PUT my_index
    4. {
    5. "mappings": {
    6. "properties":{
    7. "title":{"type":"text","copy_to": "{full_name}"},
    8. "name":{"type":"text","copy_to": "{full_name}"},
    9. "age":{"type":"integer"}
    10. }
    11. }
    12. }
    13. POST my_index/_doc/1
    14. {
    15. "title" : "还好hhh",
    16. "name":"张三"
    17. }
    18. POST my_index/_doc
    19. {
    20. "title" : "bi看电视剧",
    21. "name":"李四"
    22. }
    23. ##可以通过如下字段进行查询到数据,注意字段需要加上{}括号,如果没有就查询不到数据
    24. GET my_index/_search
    25. {
    26. "query": {
    27. "match": {
    28. "{full_name}": "张三"
    29. }
    30. }
    31. }