> 文章列表 > ES-IK分词器的概念和基本使用

ES-IK分词器的概念和基本使用

ES-IK分词器的概念和基本使用

文章目录

  • 一、ES-IK分词
    • 1.1 初识ES-IK分词器
    • 1.2 IK分词器-拓展和停用
    • 1.3 索引
      • 1.3.1 mapping属性
      • 1.3.2 索引库的CRUD
        • 基本语法:
      • 1.3.3 文档的DSL

一、ES-IK分词器

1.1 初识ES-IK分词器

  ES IK分词器是一种基于中文文本的分词器,它是Elasticsearch中文分词的一种实现。它采用了自然语言处理技术,可以将中文文本进行切分,抽取出其中的词汇,从而提高搜索引擎对中文文本的搜索和检索效率。

  ES IK分词器的原理是采用了一种叫做“正向最大匹配”(Forward Maximum Matching,简称FMM)和“逆向最大匹配”(Backward Maximum Matching,简称BMM)的分词算法,通过对文本进行多次切分,最终确定最优的分词结果。

  ES IK分词器可以用于各种中文文本处理应用,包括搜索引擎、文本挖掘、信息检索等。它支持多种分词模式,包括最细粒度切分、智能切分和最大切分等模式,可以根据具体应用场景进行灵活配置。

1.2 IK分词器-拓展和停用

  1. 要拓展或停用ik分词器的词库,需要修改ik分词器目录中的config目录中的IkAnalzer.cfg.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict">ext.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopword.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
  1. 进行拓展词汇的时候需要创建出所定义的扩展字典文件,例如本文使用的是ext.dic,再往文件中填写词汇即可,每个词汇占一行,如下图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZnQHf6JM-1682007066424)(C:\\Users\\35990\\AppData\\Roaming\\Typora\\typora-user-images\\image-20230420222010056.png)]

  2. 进行停用词库的时候打开stopword.dic文件,再往文件中添加词汇即可,每个词汇占一行,如下图(一般停用的都是语气词、严禁品等):

在这里插入图片描述

1.3 索引库

1.3.1 mapping属性

  在Elasticsearch中,mapping属性是指用于定义索引中文档的结构和属性的方式。它描述了索引中文档的字段名称、类型、分词器等元信息,这些元信息可以用于搜索、过滤和排序。

具体来说,mapping属性定义了索引中每个字段的以下信息:

  1. 字段类型(type):指定字段的数据类型,例如文本、数值、日期等。
  2. 分词器(analyzer):指定字段的分词器,用于对文本进行分词处理。
  3. 是否索引(index):指定字段是否需要被索引,如果需要,Elasticsearch将对该字段建立反向索引以支持全文检索,默认为true。
  4. 子字段(properties):该字段的子字段;

  除此之外,mapping属性还可以指定文档中的嵌套对象、数组(数组不是类型,只是可以传多个数据)等复杂类型,并对其进行相应的定义和配置。

1.3.2 索引库的CRUD

  1. 创建索引库和映射

基本语法:

  • 请求方式:PUT
  • 请求路径:/索引库名,可以自定义
  • 请求参数:mapping映射

格式:

PUT /索引库名称
{"mappings": {"properties": {"字段名":{"type": "text","analyzer": "ik_smart"},"字段名2":{"type": "keyword","index": "false"},"字段名3":{"properties": {"子字段": {"type": "keyword"}}},// ...略}}
}
  1. 查看索引库

基本语法

  • 请求方式:GET

  • 请求路径:/索引库名

  • 请求参数:无

格式

GET /索引库名
  1. 修改索引库

  倒排索引结构一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引。因此索引库一旦创建,无法修改mapping,但是可以添加新的字段到mapping中,也不会对倒排索引产生影响。

语法说明

PUT /索引库名/_mapping
{"properties": {"新字段名":{"type": "integer"}}
}
  1. 删除索引库

语法:

  • 请求方式:DELETE

  • 请求路径:/索引库名

  • 请求参数:无

格式:

DELETE /索引库名

1.3.3 文档的DSL

  1. 增加文档

语法:

POST /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},// ...
}
  1. 删除文档

语法:

DELETE /{索引库名}/_doc/id值
  1. 修改文档

a. 全量修改:

全量修改是覆盖原来的文档,其本质是:

  • 根据指定的id删除文档
  • 新增一个相同id的文档

注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。

语法:

PUT /{索引库名}/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 略
}

b. 增量修改:

增量修改是只修改指定id匹配的文档中的部分字段。

语法:

POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}
  1. 查询文档

语法:

GET /{索引库名称}/_doc/{id}

``

b. 增量修改:

增量修改是只修改指定id匹配的文档中的部分字段。

语法:

POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}
  1. 查询文档

语法:

GET /{索引库名称}/_doc/{id}