公司项目需要,要将mysql数据库中的数据快速检索并分词。
开始使用的是sphinx,这个搜索引擎安装,配置,使用,都比较简单,无需安装其他插件,相对来说功能比较单一。
对于新增记录,我的处理方法是添加增量索引,定期合并到主索引,这导致索引体积越来越大。由于sphinx在运行时是将这些索引放在内存里的,如果索引体积超出内存容量,会导致报错无法执行,所以如果想用sphinx做搜索引擎的话,请务必做好事先规划。
sphinx的分词器用的是coreseek,作者前段时间网站停了几个月,万幸现在又可以使用了,感谢他们的无私奉献。
sphinx的资料国内较少,这算是一个遗憾。
之后经过讨论,决定将搜索引擎改为elasticsearch,简称ES。
ES的安装配置就很麻烦了,而且它最经常使用的地方是和logstash、kibana一起组成ELK,处理日志,想将mysql中的数据导入,需要借助其他工具。
我个人使用的是logstash的组件input,这种方法对于数据库的删除操作,很难处理。比较看好国人的一个项目,根据mysqldump动态更新,等我有空用过之后,再行评论。
ES比较赞的是分布式功能,分片自动调整,这个正确设置的话,很好用。
缺陷的话ES的安全方面不是很好,虽然5.0版本后有x-pack支持,但也使安装配置麻烦了很多。
分词用的是ik,我比较习惯粗粒度,细粒度导致索引体积过大了。
总结一下:sphinx安装配置简单,功能单一,但性能不差,个人比较推荐作为mysql的插件来安装使用(还未有时间尝试)。ES呢,安装配置复杂了很多,功能比较强大,分布式可以进行很多细微调整,就是安全性和传统数据库导入不是很容易,不出意外的话,我最后用的就是ES了。
时间: 2024-10-10 17:15:31