Elastic Search + fscrawler 实现文档上传并搜索过滤
需求:实现一个搜索功能,搜索的内容来自上传的文档(MS Office 文档),后期也有上传图片的文字,需要全词匹配搜索高亮,还有根据用户,状态等过滤
工具:Elastic Search(后文简称ES)
上传文件处理:Fcrawler
先说现有代码逻辑:
同事一个PHP项目,现在越做越大,小型OA的感觉了(PHP做到现在吃力啊…),现在客户需要增加一个搜索的需求,就交给我来调研了。 我本人是搞.Net的,这俩月在接手一个Ruby项目,还有个C#项目的维护,本来是让我这个月开始一个Java项目的。不提这个了,大概就这样,然后这周末我又来加班了,基本上我这块搞得差不多了,然后来总结一下吧。
文档上传本来PHP那边已经做好了,但是boss 说太不稳定了,所以从上传到最后搜索,都重新搞吧。服务器部署是在AWS上,现在AWS支持的ES版本最高是7.1(当前最新版本是7.4.2),我现在本地Windows环境搭建一套 EK(ES + kibana),然后走一下,测试一下可行性。
- 安装包下载(ES一定要与Kibana版本相对应):
- 老版本下载:https://www.elastic.co/downloads/past-releases#kibana
- 本地安装,ES就是傻瓜式安装(.msi),Kibana的话压缩包解压,然后bin\kibana.bat
- 附图
- 安装完成之后浏览器打开
- 附图:
- fscrawler:https://fscrawler.readthedocs.io/en/fscrawler-2.5/user/getting_started.html 比着来就行
- 比较想说的就是那个添加附加信息(例如是哪个用户上传的),我想的是文档上传放到一个文件夹,附带把附加信息存到另外一个同名的.txt文件,然后fscrawler每隔一段时间便利文件夹时,顺便添加信息(https://fscrawler.readthedocs.io/en/fscrawler-2.5/admin/fs/rest.html#additional-tags)按照这个来我在本地是不成功的,,可以在这个地方看log。 不成功是因为格式不对,我改成如下:
- {
- "external": {
- "tenantId": 23,
- "author": 34,
- "description": "these are additional tags"
- }
- }
external就是我想加进去的