ElasticSearch自动补全

news/2024/9/23 9:29:40/

一、拼音分词器:

当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图:

这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。


GET /_analyze
{"text":"我爱螺蛳粉","analyzer": "pinyin"
}

        这个错误表明 Elasticsearch 在使用全局分析器 pinyin 时遇到了问题,因为它无法找到这个全局分析器。可能是由于缺少配置或插件问题导致的。你需要确保已正确配置了 pinyin 分析器,并且相关的插件已经正确安装和配置:

                                正确结果会是这样的:

1.1、在线安装拼音分词器:
# 进入容器内部
docker exec -it es /bin/bash# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.12.1/elasticsearch-analysis-pinyin-7.12.1.zip#退出
exit
#重启容器
docker restart es

说明:安装的链接怎么获得

[root@db301601 ~]# docker exec -it es bash
[root@877298bbcfdf elasticsearch]# cd /usr/share/elasticsearch/bin
[root@877298bbcfdf bin]# ls
elasticsearch		elasticsearch-cli	elasticsearch-env-from-file  elasticsearch-node		  elasticsearch-setup-passwords  elasticsearch-sql-cli-7.12.1.jar  x-pack-env
elasticsearch-certgen	elasticsearch-croneval	elasticsearch-keystore	     elasticsearch-plugin	  elasticsearch-shard		 elasticsearch-syskeygen	   x-pack-security-env
elasticsearch-certutil	elasticsearch-env	elasticsearch-migrate	     elasticsearch-saml-metadata  elasticsearch-sql-cli		 elasticsearch-users		   x-pack-watcher-env
[root@877298bbcfdf bin]# cd /usr/share/elasticsearch    
[root@877298bbcfdf elasticsearch]# ls
LICENSE.txt  NOTICE.txt  README.asciidoc  bin  config  data  jdk  lib  logs  modules  plugins
[root@877298bbcfdf elasticsearch]# cd /usr/share/elasticsearch/plugins
[root@877298bbcfdf plugins]# ls
analysis-ik[root@db301601 ~]# docker exec -it es /bin/bash
[root@877298bbcfdf elasticsearch]# ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.12.1/elasticsearch-analysis-pinyin-7.12.1.zip[root@877298bbcfdf elasticsearch]# ls
LICENSE.txt  NOTICE.txt  README.asciidoc  bin  config  data  jdk  lib  logs  modules  plugins
[root@877298bbcfdf elasticsearch]# cd plugins
[root@877298bbcfdf plugins]# ls
analysis-ik  analysis-pinyin
  • ./ 是指当前目录的简写。在Linux和类Unix系统中,. 表示当前目录,.. 表示上一级目录。因此,./ 表示当前目录下的文件或目录。在你的命令中,./elasticsearch-plugin 意味着你希望在当前目录中执行名为 elasticsearch-plugin 的可执行文件。
  • 使用正确的命令来删除 Elasticsearch 中的插件。正确的命令是 elasticsearch-plugin remove analysis-ik。这个命令会将名为 analysis-ik 的插件从 Elasticsearch 中移除。
  • elasticsearch-plugin 命令会将插件安装到 Elasticsearch 的插件目录中。通常情况下,插件目录位于 Elasticsearch 安装目录的 plugins 文件夹下。具体位置可能因操作系统和安装方式而异,但通常在 /usr/share/elasticsearch/plugins/opt/elasticsearch/plugins 等位置。

1.2、离线安装拼音分词器:

        安装插件需要知道elasticsearch的plugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看数据卷目录:

docker volume inspect es-plugins
[root@db301601 ~]# docker restart es
es
[root@db301601 ~]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS         PORTS                                                                                  NAMES
877298bbcfdf   elasticsearch:7.12.1   "/bin/tini -- /usr/l…"   41 hours ago   Up 2 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   es
881f28a337e6   kibana:7.12.1          "/bin/tini -- /usr/l…"   42 hours ago   Up 42 hours    0.0.0.0:5601->5601/tcp, :::5601->5601/tcp                                              kibana
[root@db301601 ~]#  docker volume ls
DRIVER    VOLUME NAME
local     03b04390f4eefc2da60368f67dbc266b76ccb710fe4275535f77a2067204da11
local     7df7ad63d90a9a6c2e3440b37e261039402950dd96f11677c8936dacd2c03210
local     ece02e3c8db3e86860f63fcc1fe9eb0a7c6f42a2b10d7a6c93d7172017886f40
local     ef6b9cdbe2110ec4802b5941d87d83250d1eb12a547a61ed342a59776fa94184
local     es-data
local     es-logs
local     es-plugins
local     root_data01
local     root_data02
local     root_data03
[root@db301601 ~]# docker volume inspect es-plugins
[{"CreatedAt": "2024-04-26T16:46:19+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data","Name": "es-plugins","Options": null,"Scope": "local"}
]
[root@db301601 ~]# cd /var/lib/docker/volumes/es-plugins/_data
[root@db301601 _data]# ls
py

说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data 这个目录中。

解压缩分词器安装包:把下载好的ik分词器解压缩,重命名为ik:

 

 上传到es容器的插件数据卷中:

重启容器:   docker restart es(容器名字)

二、自定义分词器   

注意事项:
        pinyin分词器默认时有很多缺点,比如每个字都拆分变成拼音,不符合一般需求,并且如果使用pinyin分词器,默认的中文索引就没了,只剩下pinyin索引了。所以,需要完善以下几点:

  • 分词时不仅包含汉字,还需包含拼音
  • 分词时按词分,不是字
  • 使用汉字查询时,不会查询到同音词条目docs

         如果只是单独使用拼音分词器,是没办法满足具体业务使用场景的,这时候就需要自定义分词器, 通过自定义分词器,将ik分词器与拼音分词器整合起来,来保证我们的搜索既满足汉字也满足拼音:
 

自定义分词器一定是在创建索引库的时候去设置,它只对你所指定的索引库test有效

 

在做mapping映射时,指定两个:analyzer是创建索引时用的,search_analyzer是在搜索时需要的

 


http://www.ppmy.cn/news/1442180.html

相关文章

Java try catch 应该在 for 循环里面还是外面?(面试)

时间上&#xff0c; 其实算是无差别。内存上&#xff0c; 如果没出异常&#xff0c;其实也是无差别。 但是如果出现了异常&#xff0c; 那就要注意了。 一、try catch 在 for 循环外面 public static void tryOutside() { try { for (int count 1; count < 5; count) …

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化&#xff0c;原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市&#xff0c;并请求openweathermap对应数据&#xff0c;并显示的功能。 但是搜索城市的时候&#xff0c;可能会有错误&#xff0c;比如大小写…

代码随想录算法训练营第三十七天| LeetCode738.单调递增的数字

LeetCode 738 单调递增的数字 题目链接&#xff1a;738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 需要采用从后往前的遍历 如果发现该数字的前一位比后一位大&#xff0c;那么前一位就做-1处理&#xff0c;后一位变为9 注意&#xff1a;千万不…

Axure RP 9中文激活版:专业原型设计工具mac/win

Axure RP 9是一款由美国Axure Software Solution公司开发的专业原型设计工具。它凭借强大的交互功能和丰富的设计素材&#xff0c;为产品经理、UI设计师、交互设计师等用户提供了高效、便捷的原型设计体验。 Axure RP 9支持快速创建线框图、流程图、原型和规格说明文档&#xf…

自动化立体库安全使用管理制度

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 关于自动化立体库安…

【Redis 开发】(长篇学习)掌握Redis的用法,各种客户端下的操作

Redis 前言RedisRedis的安装Redis启动Redis客户端 Redis常见命令Redis的java客户端jedis学习简单的jedis 入门流程Jedis连接池 SpringDataRedisSpringDataRedis快速入门 前言 我们在作者之前的文章: 快速掌握Redis安装与基本语法的基础上进行系统的学习&#xff0c;学习自黑马…

3.车载网络诊断测试用例标准与示例(车载网络诊断测试平台)

文章目录 1.概述2.测试用例2.1 用例名字2.2 用例ID2.3 测试需求来源2.4 测试环境2.5 测试目的2.6 前提条件2.7 手动/自动2.8 测试步骤2.9 评价标准2.10 备注2.11 测试结果2.12 测试数据3.测试用例示例4.其他1.概述

Redis集合[持续更新]

Redis&#xff08;全称&#xff1a;Remote Dictionary Server 远程字典服务&#xff09;是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API。 数据结构 1. string 字符串 字符串类型是 Redis 最…