文章目录
- 一、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分词器-拓展和停用
- 要拓展或停用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>
-
进行拓展词汇的时候需要创建出所定义的扩展字典文件,例如本文使用的是ext.dic,再往文件中填写词汇即可,每个词汇占一行,如下图:
-
进行停用词库的时候打开stopword.dic文件,再往文件中添加词汇即可,每个词汇占一行,如下图(一般停用的都是语气词、严禁品等):
1.3 索引库
1.3.1 mapping属性
在Elasticsearch中,mapping属性是指用于定义索引中文档的结构和属性的方式。它描述了索引中文档的字段名称、类型、分词器等元信息,这些元信息可以用于搜索、过滤和排序。
具体来说,mapping属性定义了索引中每个字段的以下信息:
- 字段类型(type):指定字段的数据类型,例如文本、数值、日期等。
- 分词器(analyzer):指定字段的分词器,用于对文本进行分词处理。
- 是否索引(index):指定字段是否需要被索引,如果需要,Elasticsearch将对该字段建立反向索引以支持全文检索,默认为true。
- 子字段(properties):该字段的子字段;
除此之外,mapping属性还可以指定文档中的嵌套对象、数组(数组不是类型,只是可以传多个数据)等复杂类型,并对其进行相应的定义和配置。
1.3.2 索引库的CRUD
- 创建索引库和映射
基本语法:
- 请求方式:PUT
- 请求路径:/索引库名,可以自定义
- 请求参数:mapping映射
格式:
PUT /索引库名称
{
"mappings": {
"properties": {
"字段名":{
"type": "text",
"analyzer": "ik_smart"
},
"字段名2":{
"type": "keyword",
"index": "false"
},
"字段名3":{
"properties": {
"子字段": {
"type": "keyword"
}
}
},
// ...略
}
}
}
- 查看索引库
基本语法:
-
请求方式:GET
-
请求路径:/索引库名
-
请求参数:无
格式:
GET /索引库名
- 修改索引库
倒排索引结构一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引。因此索引库一旦创建,无法修改mapping,但是可以添加新的字段到mapping中,也不会对倒排索引产生影响。
语法说明:
PUT /索引库名/_mapping
{
"properties": {
"新字段名":{
"type": "integer"
}
}
}
- 删除索引库
语法:
-
请求方式:DELETE
-
请求路径:/索引库名
-
请求参数:无
格式:
DELETE /索引库名
1.3.3 文档的DSL
- 增加文档
语法:
POST /索引库名/_doc/文档id
{
"字段1": "值1",
"字段2": "值2",
"字段3": {
"子属性1": "值3",
"子属性2": "值4"
},
// ...
}
- 删除文档
语法:
DELETE /{索引库名}/_doc/id值
- 修改文档
a. 全量修改:
全量修改是覆盖原来的文档,其本质是:
- 根据指定的id删除文档
- 新增一个相同id的文档
注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。
语法:
PUT /{索引库名}/_doc/文档id
{
"字段1": "值1",
"字段2": "值2",
// ... 略
}
b. 增量修改:
增量修改是只修改指定id匹配的文档中的部分字段。
语法:
POST /{索引库名}/_update/文档id
{
"doc": {
"字段名": "新的值",
}
}
- 查询文档
语法:
GET /{索引库名称}/_doc/{id}
``
b. 增量修改:
增量修改是只修改指定id匹配的文档中的部分字段。
语法:
POST /{索引库名}/_update/文档id
{
"doc": {
"字段名": "新的值",
}
}
- 查询文档
语法:
GET /{索引库名称}/_doc/{id}