当前位置:   article > 正文

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

ik分词器

一、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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  1. 查看索引库

基本语法

  • 请求方式:GET

  • 请求路径:/索引库名

  • 请求参数:无

格式

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

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

语法说明

PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 删除索引库

语法:

  • 请求方式:DELETE

  • 请求路径:/索引库名

  • 请求参数:无

格式:

DELETE /索引库名
  • 1

1.3.3 文档的DSL

  1. 增加文档

语法:

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

语法:

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

a. 全量修改:

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

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

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

语法:

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

b. 增量修改:

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

语法:

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

语法:

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

``

b. 增量修改:

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

语法:

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

语法:

GET /{索引库名称}/_doc/{id}
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/966412
推荐阅读
相关标签
  

闽ICP备14008679号