写过一篇 发表于 2025-1-3 12:08:29

ElasticSearch7.10-分词器

分词器

1.字符过滤器

1.先容

https://i-blog.csdnimg.cn/img_convert/4d24c375800177143436bd7388b41c25.png
2.过滤html标签

https://i-blog.csdnimg.cn/img_convert/da1a832fe9517c4c2f1c6f343afbd581.png
3.mappings过滤规则(屏蔽非文明用语)

https://i-blog.csdnimg.cn/img_convert/487fd14749e707a7b58bf9ada2f93ba1.png
4.正则更换

https://i-blog.csdnimg.cn/img_convert/e6abc071b5b030bf601669120e055772.png
2.自定义分词器

1.代码

PUT /test_index
{
"settings": {
    "analysis": {
      "char_filter": {
      "my_char_filter": {
          "type": "html_strip" // 自定义字符过滤器,使用 html_strip 类型,剥离 HTML 标签
      }
      },
      "filter": {
      "my_stopword": {
          "type": "stop", // 自定义过滤器,移除停用词
          "stopwords": ["is", "a"] // 指定停用词列表,包括 "is" 和 "a"
      }
      },
      "tokenizer": {
      "my_tokenizer": {
          "type": "pattern", // 自定义分词器,基于正则表达式进行分词
          "pattern": "[,\\.?\\s]+" // 正则表达式,将逗号、句号、问号和空格作为分隔符
      }
      },
      "analyzer": {
      "my_analysis": {
          "type": "custom", // 自定义分析器类型
          "char_filter": ["my_char_filter"], // 使用自定义字符过滤器 "my_char_filter"
          "tokenizer": "my_tokenizer", // 使用自定义分词器 "my_tokenizer"
          "filter": ["my_stopword"] // 使用自定义停用词过滤器 "my_stopword"
      }
      }
    }
}
}

2.查询

GET /test_index/_analyze
{
"analyzer": "my_analysis",
"text": "<p>This is a test, isn't it amazing?</p>"
}
https://i-blog.csdnimg.cn/img_convert/51b39aaae78e934f314164d76e148f5d.png
3.中文分词器

1.下载ik分词器7.10.0版本(跟es对应)

https://release.infinilabs.com/analysis-ik/stable/
https://i-blog.csdnimg.cn/img_convert/b51fa5f52adb9b026cb97efc974dde7a.png
https://i-blog.csdnimg.cn/img_convert/d000e31267e1ae76051977dd21bf4eb2.png
2.应用ik分词器

1.进入插件目次下创建一个ik目次

cd /usr/local/ElasticSearch/elasticsearch-7.10.0/plugins && mkdir ik
2.将下载的压缩包上传上去

cd ik
https://i-blog.csdnimg.cn/img_convert/ffd5e26774d212a838cb83aa781eefb5.png
3.安装unzip并解压

1.安装

yum install unzip
2.解压

unzip elasticsearch-analysis-ik-7.10.0.zip
3.删除zip

rm -f elasticsearch-analysis-ik-7.10.0.zip
4.将这个ik目次分别复制给另外三台节点

cp -r /usr/local/ElasticSearch/elasticsearch-7.10.0/plugins/ik /usr/local/ElasticSearch/node2/plugins && cp -r /usr/local/ElasticSearch/elasticsearch-7.10.0/plugins/ik /usr/local/ElasticSearch/node3/plugins
4.重启es

1.起首查找到es,然后kill -9

ps -aux | grep elasticsearch
2.重新启动三个节点

su elasticsearch
cd /usr/local/ElasticSearch/elasticsearch-7.10.0/bin/ && ./elasticsearch -d && cd /usr/local/ElasticSearch/node2/bin/ && ./elasticsearch -d && cd /usr/local/ElasticSearch/node3/bin/ && ./elasticsearch -d
3.使用head插件查察状态

https://i-blog.csdnimg.cn/img_convert/cef9c752aa1f843f3b37f973dd5105bc.png
3.测试ik分词器是否生效

1.创建索引并应用ik分词器

https://i-blog.csdnimg.cn/img_convert/f576d98366203976328a45c9475a002a.png
PUT /test_index
{
"mappings": {
    "properties": {
      "title": {
      "type": "text",
      "analyzer": "ik_smart"         
      },
      "description": {
      "type": "text",
      "analyzer": "ik_max_word"      
      }
    }
}
}

2.插入数据

POST /test_index/_doc
{
"title": "Elasticsearch 是一个分布式搜索引擎",
"description": "IK 分词器支持中文分词,并且可以用于全文检索"
}

3.查察分词结果

POST /test_index/_analyze
{
"field": "title",
"text": "Elasticsearch 是一个分布式搜索引擎"
}

https://i-blog.csdnimg.cn/img_convert/67cf19db9ff352b2cc33ea5ba11a15e9.png
POST /test_index/_analyze
{
"field": "description",
"text": "IK 分词器支持中文分词,并且可以用于全文检索"
}

https://i-blog.csdnimg.cn/img_convert/2286a6fa4c9d1f4a83442b5b21c0a3f9.png
4.ik分词器的设置文件

https://i-blog.csdnimg.cn/img_convert/0cc00718ea6d829369b37d5581113d25.png
索引的批量操纵

1.基于mget的批量查询

1.环境搭建

PUT /new_index
{
"mappings": {
    "properties": {
      "name": {
      "type": "text"
      },
      "age": {
      "type": "integer"
      }
    }
}
}
POST /new_index/_doc/1
{
"name": "Alice",
"age": 25
}

POST /new_index/_doc/2
{
"name": "Bob",
"age": 30
}

POST /new_index/_doc/3
{
"name": "Charlie",
"age": 22
}
2.根据id进行批量查询

GET /new_index/_mget
{
"ids":
}

https://i-blog.csdnimg.cn/img_convert/5fdcbd92515b0f26d45d2e334bc79676.png
3.还可以在批量查询时指定自己想要的字段

GET /new_index/_mget
{
"docs": [
    {
      "_id": 1,
      "_source": {
      "include": [
          "name"
      ]
      }
    },
    {
      "_id": 2,
      "_source": {
      "exclude": [
          "name"
      ]
      }
    }
]
}

https://i-blog.csdnimg.cn/img_convert/5e45cbd17e7d085fc8f519ad250c3fae.png
2.文档的四种操纵类型

1.先容

https://i-blog.csdnimg.cn/img_convert/0bfb0805bc5d8f0f0c9ff363df0c3241.png
2._create 创建数据

https://i-blog.csdnimg.cn/img_convert/65c0f21315252b86a3a0ccb5d470ab2e.png
3.删除数据

https://i-blog.csdnimg.cn/img_convert/704d1d03f865cc803725eb5a8756f206.png
4._search 查询数据

https://i-blog.csdnimg.cn/img_convert/6c43dc58f65d3a7e2192f05aecb57bc7.png
5._update 更新数据

https://i-blog.csdnimg.cn/img_convert/ea9c02db5f7813f4502ac0ed94347911.png
3._bulk

https://i-blog.csdnimg.cn/img_convert/9c8bbfd7ce04147b54a63aa7ca0c8fa5.png
含糊搜刮和智能搜刮推荐

1.基本先容

https://i-blog.csdnimg.cn/img_convert/7396199737071addbd263654e5e189ff.png
2.前缀搜刮

1.基础数据

#prefix: 前缀搜索
POST /my_index/_bulk?filter_path=items.*.error
{ "index": { "_id": "1" } }
{ "text": "城管打电话喊商贩去摆摊摊" }
{ "index": { "_id": "2" } }
{ "text": "笑果文化回应老农去摆摊" }
{ "index": { "_id": "3" } }
{ "text": "老农耗时17年种出椅子树" }
{ "index": { "_id": "4" } }
{ "text": "夫妻结婚30多年AA制,被城管抓" }
{ "index": { "_id": "5" } }
{ "text": "黑人见义勇为阻止抢劫反被铐住" }

2.代码

{
"query": {
    "prefix": {
      "text": {
      "value": "笑"
      }
    }
}
}
3.原理

前缀匹配是对倒排索引进行匹配的,而不是整个字段
3.通配符搜刮

1.基本先容

通配符也是匹配的倒排索引
2.代码

https://i-blog.csdnimg.cn/img_convert/74d6a464f4e421cc6025fc041d6bcc3f.png
4.正则匹配

https://i-blog.csdnimg.cn/img_convert/039d46b447be60e142dd303ecea89f8f.png
5.含糊查询

1.先容

https://i-blog.csdnimg.cn/img_convert/d8d9f4b7d4ebb8ce7eec691a0b7862c9.png
2.代码

注意:fuzzy是不分词的,match是分词的
https://i-blog.csdnimg.cn/img_convert/b8b822e5d5e392248a29bf66f976aa98.png
6.短语前缀

1.先容

https://i-blog.csdnimg.cn/img_convert/e25500e869b23ebb8b02f4a53d83e06d.png
2.代码

https://i-blog.csdnimg.cn/img_convert/e7af2de8161ce88ec5007bf1477e3fa4.png
7.edge_ngram

PUT /my_index
{
"settings": {
    "analysis": {
      "filter": {
      "my_edge_ngram": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 5
      }
      },
      "analyzer": {
      "my_ngram_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_edge_ngram"
          ]
      }
      }
    }
},
"mappings": {
    "properties": {
      "text": {
      "type": "text",
      "analyzer": "my_ngram_analyzer",
      "search_analyzer": "standard"
      }
    }
}
}


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: ElasticSearch7.10-分词器