Skip to main content

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"

客户端

  • Kibana是正统,Dev Tools工具使用很方便。
  • 如果没有部署Kibana:
    • 使用API调试工具:insomnia, apidog等
    • GUI客户端:ES-Kingdockit。(目前能找到的GUI客户端看上去都有些简陋)
  • Python SDK
    pip install elasticsearch