ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引

中文分词

elasticsearch本身自带的中文分词,就是单纯把中文一个字一个字的分开,根本没有词汇的概念。但是实际应用中,用户都是以词汇为条件,进行查询匹配的,如果能够把文章以词汇为单位切分开,那么与用户的查询条件能够更贴切的匹配上,查询速度也更加快速。

使用默认

GET movie_index/_analyze
{
       
  "text": "我是中国人"
}

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第1张图片

安装IK

与es版本一致
分词器下载网址:https://github.com/medcl/elasticsearch-analysis-ik

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第2张图片

分发

原理

穷举:查看ik/config/extra_main.dic的文件
ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第3张图片

IK维护扩展词库

查看ik/config/IKAnalyzer.cfg.xml文件
ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第4张图片

测试分词器

GET movie_index/_analyze
{
       "analyzer": "ik_smart", 
  "text": "我是中国人"
}

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第5张图片

第二种分词器

GET movie_index/_analyze
{
       "analyzer": "ik_max_word", 
  "text": "我是中国人"
}

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第6张图片

Mapping

  1. type可以理解为table,每个type中的字段是什么数据类型,由mapping定义。
  2. 但是如果没有设定mapping系统会自动,根据一条数据的格式来推断出应该的数据格式。
  3. mapping除了自动定义,还可以手动定义,但是只能对新加的、没有数据的字段进行定义。一旦有了数据就无法再做修改了。
  4. 虽然每个Field的数据放在不同的type下,但是同一个名字的Field在一个index下只能有一种mapping定义。
GET movie_index/_mapping/movie

	true/falseboolean
	1020long
	20.1double2018-02-01” → date
	“hello world” → text +keyword
默认只有text会进行分词,keyword是不会分词的字符串。

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第7张图片

基于中文分词搭建索引

  1. 建立mapping
PUT movie_chn
{
     
  "mappings": {
     
    "movie":{
     
      "properties": {
     
        "id":{
     
          "type": "long"
        },
        "name":{
     
          "type": "text"
          , "analyzer": "ik_smart"
        },
        "doubanScore":{
     
          "type": "double"
        },
        "actorList":{
     
          "properties": {
     
            "id":{
     
              "type":"long"
            },
            "name":{
     
              "type":"keyword"
            }
          }
        }
      }
    }
  }
}

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第8张图片
2. 插入数据

PUT /movie_chn/movie/1
{
      "id":1,
  "name":"红海行动",
  "doubanScore":8.5,
  "actorList":[  
  {
     "id":1,"name":"张译"},
  {
     "id":2,"name":"海清"},
  {
     "id":3,"name":"张涵予"}
 ]
}
PUT /movie_chn/movie/2
{
     
  "id":2,
  "name":"湄公河行动",
  "doubanScore":8.0,
  "actorList":[  
{
     "id":3,"name":"张涵予"}
]
}

PUT /movie_chn/movie/3
{
     
  "id":3,
  "name":"红海事件",
  "doubanScore":5.0,
  "actorList":[  
{
     "id":4,"name":"张晨"}
]
}
  1. 查询测试
GET /movie_chn/movie/_search
{
     
  "query": {
     
    "match": {
     
      "name": "红海战役"
    }
  }
}

GET /movie_chn/movie/_search
{
     
  "query": {
     
    "term": {
     
      "actorList.name": "张译"
    }
  }
}

ElasticSearch默认中文分词|安装外部中文分词器IK|Mapping的简单测试|基于中文分词搭建索引_第9张图片

你可能感兴趣的:(ElasticSearch,Gmall,零,elasticsearch,java,数据库,大数据,mysql)