Elasticsearch
tip
在RAG中,基于向量的相似度检索不能代替关键字检索(倒排索引)。
选择哪个组件,的确出考虑了一段时间的。前些年做AIOps的时候用过ES,基于Java技术栈,在大型集群环境中,资源消耗大,运维复杂,这两点被Clickhouse吊打。
虽然有meilisearch这样新兴的、轻量级组件面世,但是其成熟度和生态还有待观察。OpenSearch看上去发展的不错,之前是AWS主导,后来阿逼里云也掺和进来了。。。(真心烦这朵云)
不管怎么说,elasticsearch现在依然还是“老大”级别的存在,用es准没错,而且RAG场景中,通常不会使很大规模的集群。
在容器中运行elasticsearch
开发测试PoC,或者小型应用,在云主机上运行单节点集群就可以。
在宿主机上修改vm.max_map_count参数
sysctl -w vm.max_map_count=262144
如果要持久有效,将上述配置写入到/etc/sysctl.conf文件中。
docker run -d --name es01 \
-e "discovery.type=single-node" \
-e "cluster.name=docker-cluster" \
-e "xpack.security.enabled=true" \
-v /data/elasticsearch_data/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch_data/log:/usr/share/elasticsearch/logs \
-v /data/elasticsearch_data/plugins:/usr/share/elasticsearch/plugins \
-p 9200:9200 -it -m 4GB \
docker.elastic.co/elasticsearch/elasticsearch:9.1.5
首次运行,在日志中将elastic用户的默认密码复制记录下来。因为是单节点集群,因此可以忽略enrollment token相关的信息
在容器中运行Kibana
一个Kibana实例只能管理一个ES集群。
docker run -d --name kib01 \
-e ELASTICSEARCH_HOSTS=http://10.10.1.111:9200 \
-e ELASTICSEARCH_USERNAME=kibana_system \
-e ELASTICSEARCH_PASSWORD=密码 \
-v /data/kibana_data/data:/usr/share/kibana/data \
-v /data/kibana_data/log:/usr/share/kibana/logs \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:9.1.5
首次运行,在日志中将访问URL复制记录下来,特别是?code=参数的内容
Kibana不能用elastic用户连接到ES集群
elasticsearch常用操作
使用docker exec -it es01 bash命令进入到容器控制台
重置密码
bin/elasticsearch-reset-password -u elastic
安装plugin
bin/elasticsearch-plugin install analysis-smartcn
上述示例安装的是官方中文分词插件,联网安装顺利。如果要安装社区插件,大概率得使用离线安装方式,具体步骤参考插件文档。插件安装完成后,要重启ES服务才能生效,使用docker restart命令即可。
通过curl访问elasticsearch
curl -X GET -u elastic:密码 "http://10.10.1.111:9200/_cat/indices?v"