ElasticSearch学习

文章40 |   阅读 18140 |   点赞0

来源:https://blog.csdn.net/ywl470812087/category_9621251.html

ElasticSearch关于映射mapping介绍

x33g5p2x  于2021-12-19 转载在 其他  
字(4.5k)|赞(0)|评价(0)|浏览(327)

#首先我们还是先增加几个文档

PUT /myindex/article/1
{
 "post_date": "2020-03-14",
 "title": "Java",
 "content": "java is the best language",
  "author_id": 119
}

PUT /myindex/article/2
{"post_date": "2020-03-14" ,
  "title": "html",
  "content": "I like html",
  "author_id": 120
}
PUT /myindex/article/3
{"post_date": "2020-03-14" ,
  "title": "es",
  "content": "Es is distributed document store" ,
  "author_id": 110
}
#查看es的文档映射mapping的数据结构
GET /myindex/article/_mapping

mapping数据结构如下: 

{
  "myindex" : {
    "mappings" : {
      "article" : {
        "properties" : {
          "author_ id" : {
            "type" : "long"
          },
          "content" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "post_ _date" : {
            "type" : "date"
          },
          "post_ date" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "title" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

这里我们并没有为索引文档的数据结构做定义,但是我们发现es自动创建了 index type 以及type对应的mapping(dynamic mapping) 说明ElasticSearch能根据我们给的数据自动检测并且给定字段的数据类型

如果给定的  true  、false------>boolean

如果给定的字符串 "字符串"------>string(注意我这里用的是6.8.6版本 string已经被text或者keyword代替)

如果给定的数字   1、2------>long

如果给定的小数  12.34------>double

如果给定的时间   2020-03-14------->date

什么是映射mapping?

mapping定义了type中的每个字段的数据类型以及这些字段的如何分词的等相关属性

我们现在带查询一下添加的文档内容 GET /myindex/article/_search

{
  "took" : 29,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "post_ date" : "2020-03-14",
          "title" : "html",
          "content" : "I like html",
          "author_ id" : 120
        }
      },
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "post_ date" : "2020-03-14",
          "title" : "Java",
          "content" : "java is the best language",
          "author_ id" : 119
        }
      },
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "post_ _date" : "2020-03-14",
          "title" : "es",
          "content" : "Es is distributed document store",
          "author_ id" : 110
        }
      }
    ]
  }
}

带条件的查询

#查不出来
GET /myindex/article/_search?q=post_date:2020

#可以查出来
GET /myindex/article/_search?q=post_date:2020-03-14

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "post_date" : "2020-03-14",
          "title" : "html",
          "content" : "I like html",
          "author_id" : 120
        }
      },
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "post_date" : "2020-03-14",
          "title" : "Java",
          "content" : "java is the best language",
          "author_id" : 119
        }
      },
      {
        "_index" : "myindex",
        "_type" : "article",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "post_date" : "2020-03-14",
          "title" : "es",
          "content" : "Es is distributed document store",
          "author_id" : 110
        }
      }
    ]
  }
}

#可以查出来
GET /myindex/article/_search?q=content:html

注意?

**这是因为ElasticSearch映射mapping进行指定的,post_date是日期类型,而content是字符串类型所以字符串就查询出来了。**像日期date类型和数字long类型要进行精确查询才可以查询,而说明日期和数字类型没有进行分词,而字符串进行了分词。字符串text类型默认进行了分词的

到这里我们知道了mapping有两个作用,一是规定自定的类型,二是规定相关字段的属性(比如是不是进行分词)

相关文章