前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年12月 Elasticsearch数据库-ELK添加中文分词器插件(三)

【愚公系列】2022年12月 Elasticsearch数据库-ELK添加中文分词器插件(三)

作者头像
愚公搬代码
发布2022-12-16 15:57:50
3320
发布2022-12-16 15:57:50
举报
文章被收录于专栏:历史专栏

文章目录


前言

分词器的作用是把一段文本中的词按一定规则进行切分。对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言,要用不同的分词器。

在创建索引时会用到分词器,在搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。

1.IK分词器

IK 分词器地址:https://github.com/medcl/elasticsearch-analysis-ik

在这里插入图片描述
在这里插入图片描述

IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.2/elasticsearch-analysis-ik-7.15.2.zip

2.pingying分词器

pingying Github地址: https://github.com/medcl/elasticsearch-analysis-pinyin

在这里插入图片描述
在这里插入图片描述

pinyin分词器下载地址:https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.15.2/elasticsearch-analysis-pinyin-7.15.2.zip

一、ELK添加中文分词器插件

1.IK分词器测试

1.1 文件准备

把下载好的IK分词器解压到plugins文件夹

在这里插入图片描述
在这里插入图片描述

重启Elasticsearch服务

1.2 测试

1、创建索引

代码语言:javascript
复制
#创建映射
post index/_mapping
{
	"properties": {
	    "content": {
	        "type": "text",
	        "analyzer": "ik_max_word",
	        "search_analyzer": "ik_smart"
	    }
	}
}

2、添加索引数据

代码语言:javascript
复制
post /index/_create/1
{"content":"美国留给伊拉克的是个烂摊子吗"}

post /index/_create/2
{"content":"公安部:各地校车将享最高路权"}
 
post /index/_create/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
 
post /index/_create/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
在这里插入图片描述
在这里插入图片描述

3、查询索引数据

代码语言:javascript
复制
post /index/_search
{
    "query" : { "match" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
在这里插入图片描述
在这里插入图片描述

2.pingying分词器测试

2.1 文件准备

把下载好的pingying分词器解压到plugins文件夹

在这里插入图片描述
在这里插入图片描述

重启Elasticsearch服务

2.2 测试

2.2.1 单个测试

1、创建索引

代码语言:javascript
复制
PUT /medcl/
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "pinyin_analyzer" : {
                    "tokenizer" : "my_pinyin"
                    }
            },
            "tokenizer" : {
                "my_pinyin" : {
                    "type" : "pinyin",
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : true,
                    "keep_original" : true,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true,
                    "remove_duplicated_term" : true
                }
            }
        }
    }
}
在这里插入图片描述
在这里插入图片描述

2、测试拼音分词器效果

代码语言:javascript
复制
GET /medcl/_analyze
{
  "text": ["刘德华"],
  "analyzer": "pinyin_analyzer"
}
在这里插入图片描述
在这里插入图片描述

3、创建映射

代码语言:javascript
复制
POST /medcl/_mapping
{
        "properties": {
            "name": {
                "type": "keyword",
                "fields": {
                    "pinyin": {
                        "type": "text",
                        "store": false,
                        "term_vector": "with_offsets",
                        "analyzer": "pinyin_analyzer",
                        "boost": 10
                    }
                }
            }
        }
 
}
在这里插入图片描述
在这里插入图片描述

4、添加索引数据

代码语言:javascript
复制
POST /medcl/_create/andy
{"name":"刘德华"}
在这里插入图片描述
在这里插入图片描述

5、查询索引数据

代码语言:javascript
复制
GET /medcl/_search
{
  "query": {
    "match": {
      "name.pinyin": "liu"
    }
  }
}
在这里插入图片描述
在这里插入图片描述
2.2.2 多个测试

1、创建索引

代码语言:javascript
复制
PUT /medcl1/ 
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "user_name_analyzer" : {
                    "tokenizer" : "whitespace",
                    "filter" : "pinyin_first_letter_and_full_pinyin_filter"
                }
            },
            "filter" : {
                "pinyin_first_letter_and_full_pinyin_filter" : {
                    "type" : "pinyin",
                    "keep_first_letter" : true,
                    "keep_full_pinyin" : false,
                    "keep_none_chinese" : true,
                    "keep_original" : false,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true,
                    "trim_whitespace" : true,
                    "keep_none_chinese_in_first_letter" : true
                }
            }
        }
    }
}

2、测试拼音分词器效果

代码语言:javascript
复制
GET /medcl1/_analyze
{
  "text": ["刘德华 张学友 郭富城 黎明 四大天王"],
  "analyzer": "user_name_analyzer"
}
在这里插入图片描述
在这里插入图片描述

3、创建映射

代码语言:javascript
复制
POST /medcl/_mapping
{
  "properties": {
      "name": {
          "type": "keyword",
          "fields": {
              "pinyin": {
                  "type": "text",
                  "store": false,
                  "term_vector": "with_offsets",
                  "analyzer": "pinyin_analyzer",
                  "boost": 10
              }
          }
      }
  }
}
在这里插入图片描述
在这里插入图片描述

4、添加索引数据

代码语言:javascript
复制
POST /medcl/_create/andy1
{"name":"刘德华"}
在这里插入图片描述
在这里插入图片描述

5、查询索引数据

代码语言:javascript
复制
GET /medcl/_search
{
  "query": {
    "match": {
      "name.pinyin": "liu"
    }
  }
}
在这里插入图片描述
在这里插入图片描述
2.2.3 短语查询测试
2.2.3.1 medcl2索引

1、创建索引

代码语言:javascript
复制
PUT /medcl2/
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "pinyin_analyzer" : {
                    "tokenizer" : "my_pinyin"
                    }
            },
            "tokenizer" : {
                "my_pinyin" : {
                    "type" : "pinyin",
                    "keep_first_letter":false,
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : true,
                    "keep_original" : false,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true
                }
            }
        }
    }
}
在这里插入图片描述
在这里插入图片描述

2、查询medcl2索引数据

代码语言:javascript
复制
GET /medcl2/_search
{
  "query": {"match_phrase": {
    "name.pinyin": "刘德华"
  }}
}
在这里插入图片描述
在这里插入图片描述

因为没数据哈哈哈。。。。。

2.2.3.2 medcl3索引

1、创建索引

代码语言:javascript
复制
PUT /medcl3/
{
   "settings" : {
       "analysis" : {
           "analyzer" : {
               "pinyin_analyzer" : {
                   "tokenizer" : "my_pinyin"
                   }
           },
           "tokenizer" : {
               "my_pinyin" : {
                   "type" : "pinyin",
                   "keep_first_letter":true,
                   "keep_separate_first_letter" : true,
                   "keep_full_pinyin" : true,
                   "keep_original" : false,
                   "limit_first_letter_length" : 16,
                   "lowercase" : true
               }
           }
       }
   }
}
在这里插入图片描述
在这里插入图片描述

2、添加索引映射

代码语言:javascript
复制
POST /medcl3/_mapping 
{
  "properties": {
      "name": {
          "type": "keyword",
          "fields": {
              "pinyin": {
                  "type": "text",
                  "store": false,
                  "term_vector": "with_offsets",
                  "analyzer": "pinyin_analyzer",
                  "boost": 10
              }
          }
      }
  }
}
在这里插入图片描述
在这里插入图片描述

3、分析索引数据

代码语言:javascript
复制
GET /medcl3/_analyze
{
   "text": ["刘德华"],
   "analyzer": "pinyin_analyzer"
}
在这里插入图片描述
在这里插入图片描述

4、添加索引数据

代码语言:javascript
复制
POST /medcl3/_create/andy
{"name":"刘德华"}
在这里插入图片描述
在这里插入图片描述

5、查询索引数据

代码语言:javascript
复制
GET /medcl3/_search
{
 "query": {"match_phrase": {
   "name.pinyin": "刘德h"
 }}
}

GET /medcl3/_search
{
 "query": {"match_phrase": {
   "name.pinyin": "刘dh"
 }}
}

GET /medcl3/_search
{
 "query": {"match_phrase": {
   "name.pinyin": "liudh"
 }}
}

GET /medcl3/_search
{
 "query": {"match_phrase": {
   "name.pinyin": "liudeh"
 }}
}

GET /medcl3/_search
{
 "query": {"match_phrase": {
   "name.pinyin": "liude华"
 }}
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
    • 1.IK分词器
      • 2.pingying分词器
      • 一、ELK添加中文分词器插件
        • 1.IK分词器测试
          • 1.1 文件准备
          • 1.2 测试
        • 2.pingying分词器测试
          • 2.1 文件准备
          • 2.2 测试
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档