公司項目需要,要將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了。