ES的使用方法可以参考 https://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
查询所有内容:
curl "http://ip:port/whisper.messages/_search?pretty"
目前最常用的中文分词器是 https://github.com/medcl/elasticsearch-analysis-ik
ES 的 helm chart : https://artifacthub.io/packages/helm/elastic/elasticsearch
官方推荐的插件安装方法是包装一个新的镜像,这件事已经有人做了 https://hub.docker.com/r/fahchen/elasticsearch-analysis-ik/
需要给对应的索引加上分词的设置,首先查询索引的状态:
curl http://ip:port/whisper.messages/_settings
在对应的字段上启用 ik 分词器。 关于两种 ik 模式(max vs smart)的选择: https://zhuanlan.zhihu.com/p/52543633 ,对于搜索来说似乎 smart 模式会好一些, max 会有比较多的误召。
注意一个索引的analyzer不能动态更新,如果之前已经创建了需要删除之后重建:
curl -XDELETE http://ip:port/whisper.messages
创建带有 ik 分词器的索引 (https://www.elastic.co/guide/en/elasticsearch/reference/current/specify-analyzer.html):
curl -X PUT "http://ip:port/whisper.messages?pretty" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"content.text": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
}
'
curl -X PUT "http://ip:port/whisper.channels?pretty" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"description": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"name": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
}
'
测试分词效果:
curl -XPOST http://ip:port/whisper.messages/_search\?pretty -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content.text" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content.text" : {}
}
}
}
'
可以通过 https://github.com/rwynn/monstache 来自动同步 MongoDB 和 ES 之间的数据。 配置起来很简单,只需要指定 mongo 和 es 的连接方式,以及要同步的 db.collection 就好,软件本身是一个单一二进制,也可以用 docker 。 如果是第一次启动可以先指定需要全量同步的 collection ,注意同步之前先创建好 ik 索引。
由于 monstache 的 docker 镜像使用配置文件的方式部署,需要先在集群中创建一个 configmap ,挂载进容器之后使用。