搜索基本上是网站或者 app 必备的功能了;
可是同样是搜索;
实现起来也都能是尼古拉斯凯奇和尼古拉斯赵四间的差距;
一般的搜索是 sql 模糊查询级别的;
比如说文章中有 php是世界上最好的语言 这句话;
如果我们用 sql 的 like 的 % 模糊查询的话;
搜索词必须要连贯切一字不差;
可以搜 like php是% 也可以搜 like %最好的语言 或者 like %世界上最好% ;
然鹅要是搜 "世界最好语言" 就搜不到了;
这他喵的就尴尬了;
作为被谷歌百度甚至是淘宝惯坏了广大用户们;
怎么可能会那么严谨的正好一字不差且顺序不乱的输入关键词;
这时候有个叫 全文搜索 需要了解一下了;
简单的来说全文搜索的原理就是把内容按关键字给拆分了;
比如说上面这句话拆成 php 、世界 、最好 、 语言 ;
然后把这些关键字和内容关联索引;
再复杂点的就再加上同义词拼音什么的噼里啪啦;
当用户搜索的时候把用户输入的内容也拆分了来和索引匹配计算权重;
如果要实现全文搜索;
那最佳的选择就是 Elasticsearch 了;
github 、 Stack Overflow 、维基百科、 微软、 IBM 等等用了都说好;
Elasticsearch 是基于 Lucene ;
基于 Lucene 的还有一个 Solr ;
另外还有毛熊们开发的 Sphinx 以及国产的 xunsearch ;
至于这么多怎么选择的问题就简单了;
从小老师就教我们3短1长选最长;
本文就作为一个 key ;
至于它们之间详细的优缺点;
童鞋们可以自行寻找 value 了;
以上这些都是需要独立安装的搜索
小项目用起来就有点牛刀杀鸡的赶脚;
作为世界上最好的语言;
我们大 php 还有个可以不依赖第三方自己就可以实现全文搜索扩展包;
TNTSearch
英文实现全文搜索相对来说容易些;
因为可以容易的直接按空格来把句子拆分成关键字;
而中文就比较惨了;
非国产的全文搜索软件默认都是把中文按字拆的;
它并不懂 世界 、最好 、 语言 这些是词语;
是要放在一起的不能被傻愣愣的给拆成单个字;
这时候就需要中文分词了;
中文分词就是会智能点的按中文的词语来拆分内容;
这里点名可以作为 Elasticsearch 中文分词插件的 IK Analyzer ;
以及作为 TNTSearch 中文分词的 jieba-php ;
我选择了2套组合;
Elasticsearch + IK Analyzer 完全独立;
TNTSearch + jieba-php 完全基于 php ;
没错下面就是要写这两套组合;
不过不是今天;
一写文章就凌晨;
90后已经开始保温杯枸杞养生了;
作为00后我也不能熬夜太晚;
有兴趣的可以自己先研究;
我博客程序已经集成了 TNTSearch + jieba-php ;
可以作为研究时的参考;
我先回被窝了;