背景:最近在写一个wiki系统 检索时需要全文检索,输入关键字点击查询时还需检索文件中的内容(Word、PDF、Excel、txt)等,这个时候一般的SQL检索就不能满足现状了,在网上查阅了一些资料选择了ElasticSearch
1、使用的工具
1)elasticsearch-7.6.2
①elasticsearch-analysis-ik-7.6.2
②ingest-attachment-7.6.2
2)elasticsearch-head-master
3)kibana-7.6.2-windows-x86_64
4)node.js
我选择的版本是7.6.2 大家可自行选择其它版本 下载的时候版本须和elasticSearch保持一致 这里提供了我自己下载好的工具压缩包 在主页里的资源里 无需C币和积分
elastic官网下载链接:https://www.elastic.co/cn/downloads/past-releases/
还可以去华为云下载:https://mirrors.huaweicloud.com/home
2、安装步骤
2.1、安装elasticsearch
elasticSearch下载:https://www.elastic.co/cn/downloads/
打开下载后的目录
运行bin目录下的 elasticsearch.bat
访问:
这样elasticSearch就算安装成功了 需要安装可视化工具了。
2.2、安装elasticsearch-head
首先安装elasticsearch-head之前需要node.js 没有的先安装一下(资源里面有)
elasticSearch-head下载地址:https://github.com/mobz/elasticsearch-head
1、输入安装命令:npm install (初次安装时 运行一次 以后启动直接输入启动命令即可)
我这里已经安装成功了 就不截图了 大家自己安装即可。
2、输入启动命令:npm install
3、访问之前解决跨域问题:
打开此目录中的elasticsearch.yml文件
#开启跨域
http.cors.enabled: true
# 所有人访问
http.cors.allow-origin: "*"
4、访问本地9100接口即可。
此处链接的9200是elasticSearch
2.3、安装kibana
1、kibana下载地址:https://www.elastic.co/cn/downloads/kibana
下载好kibana之后先汉化
打开kibana-7.6.2-windows-x86_64\config\kibana.yml
i18n.locale: "zh-CN"
2、启动
打开kibana\bin\kibana.bat 即可启动
3、访问
2.4、安装ik分词器
1、ik分词器可以将输入的查询关键字 按照本地词库进行切割。
ik分词器下载:https://github.com/medcl/elasticsearch-analysis-ik/releases
下载时需要和elasticSearch的版本一致
在elasticSearch\plugins下新建ik文件夹 将下载后的ik分词器解压至该目录下
2、重启elasticSearch
这里可以看到 已经加载了ik分词器
2.5、安装ingest-attachment
1、下载链接:https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.6.2.zip.
在elasticSearch\plugins下新建ingest-attachment文件夹 将下载后的文件解压至该目录下
2、重启elasticSearch
这里可以看到 已经加载了ingest-attachment
安装ingest-attachment 就是为了检索文件用的 自己理解的原理是 程序上传文件时 需要将文件同步到es上 先将文件转换为 Base64 ingest-attachment再将Base64提取成文本 存入es索引中 以供检索使用。
3、kibana测试
1、使用kibana建立Ingest-Attachment通道
2、创建索引
3、测试文件存入es
data里面放的就是文件的Base64码
PUT _ingest/pipeline/simple_attachment
{
"description": "单文件管道流",
"processors": [
{
"attachment": {
"field": "data",
"properties": [
"content",
"title"
],
"ignore_missing": true
}