wikijs如何增加全文搜索的功能,增加对应的索引(Win11环境+docker+数据库elasticSearch)
前言
本文是Win11下轻松搭建wiki.js,Docker.desktop部署指南(mysql+elasticsearch+kibana+wiki.js)的后续文章,需要在win11的docker环境中部署了elasticSearch和wikijs后才能按照操作完成设置。
elasticSearch版本:8.18.0(包括kibana、ik分词器)
wikijs版本:2.5.307
mysql版本:9.2.0(不过和本文关联不大)
提前准备
在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),下图红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。
索引功能
我们先介绍一下索引这个功能吧,因为我们的全文搜索功能就是基于索引实现的。
我们做一个简单的比喻,想象一下一个巨大的图书馆:
- 书的内容 = 您 WikiJS 中的所有文章和页面(存储在数据库中)
- 图书馆管理员 = Elasticsearch(搜索引擎)
- 索引 = 图书卡片目录
一开始我们没有索引的时候,如果你要某本书里面是否有出现“猫头鹰”这个词,那么图书馆管理员就只能对着你的所有的书,一本一本的去查,这本有没有,那本有没有。而且你每搜索一次,他就要对着所有的书都这样翻一遍,耗时太长。
所以为了查起来方便,图书管理员想了一个好办法,就是他会一开始就把图书馆里面所有的书都翻一遍,为每本书都制作一个图书卡片。当你再想去查"猫头鹰"的时候,他只要把他手边m开头的所有图书卡片拿起来,然后找到猫头鹰的卡片,再把这个卡片里面写的所有对应的书然后全部列给你就行了。
1. 在es中配置ik分词器
为了防止有人还没有配置ik分词器,先把配置的方式列在这边,已配置的可以跳过这一段。
首先进入这个网页(下面的安装指令能正常执行的话跳过这一步也行)
https://github.com/infinilabs/analysis-ik/releases/tag/Latest
页面往下翻,直到出现红框这一部分,把其中的指令复制下来
输入指令
# 进入 Elasticsearch 容器
docker exec -it es /bin/bash# 安装ik分词器,就是你刚刚复制的那个指令,但是版本号要改成你es的版本号,文章是8.18.0
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.18.0
最后重启一下es容器即可。
2. 在es中配置索引
# 进入 Elasticsearch 容器
docker exec -it es /bin/bash
先查询一下到时候要起的索引名字是不是已经被占用了,比如说我计划起的名字就是wiki。
curl -X GET "localhost:9200/wiki/_mapping?pretty"
如果发现已经被使用,也就是有返回内容的话,就先删除掉,然后准备重新创建一个
curl -X DELETE "localhost:9200/wiki"
创建索引的指令如下:
curl -X PUT "localhost:9200/wiki" -H 'Content-Type: application/json' -d'
{"settings": {"analysis": {"analyzer": {"default": { "type": "ik_smart"}}}}
}
'
最后再查询一下是否创建成功,成功就没问题了。
curl -X GET "localhost:9200/wiki/_mapping?pretty"
2.1 指令说明
本文提供的索引规则,只是最基础的功能,可能不一定能完全满足实际需要,文章侧重重点在于从0-1的走完这个索引的部署链路。
为了方便后续我们自己学习和迭代索引规则,对这个最简单的创建和查询索引的指令进行说明。
指令 | 说明 |
---|---|
curl -X | 固定前缀,对elasticSearch进行http请求 |
DELETE/GET/PUT | 不同的指令,删除获取添加,很好理解 |
localhost:9200/wiki/ | url,/后面是索引的名称 |
/_mapping | GET时的具体操作,有固定的写法,_mapping表示查看结构,_search表示搜索,_count表示计数等 |
?_pretty | GET时固定附加写法,让返回数据以json串的结构返回 |
-H ‘Content-Type: application/json’ | -H表示请求头,后面的文本是固定写法,表示我们的请求内容格式是json串 |
-d { } | 表示请求体,d是detail的缩写 |
了解这些基础内容之后,后续有想要实现的指令,直接去问deepseek就行,他会帮我们生成指令的,我们只要能看得懂就行。
3. 在wikijs中使用索引
进入我们的wikijs网页,登录管理员账号,进入管理员页面。点击搜索引擎
在搜索引擎页面如下配置:
- 先选择ElasticSearch。
- 版本号根据实际来,然后Host固定填入:http://es:9200
- IndexName索引名称就是我们上一节创建的名称,文章中是wiki。
- Analyzer固定填入你在上一节中请求体内analyzer中的部分,这里是ik_smart。
- 然后点击右上角的应用,再点一下重建索引,完成。
参考资料
DeepSeek