平日里大家搜索资料的时候,少不了和搜索引擎打交道。
类似下面从 Google 学术搜索找相关资料的场景,大家肯定没少做。比如输入 data warehousing 查询最新的学术报告,研究进展或者经典书籍。运气好的时候,几乎可以不必买下整本价格不菲的英文原版书,而找到自己想要的那部分内容。
还有一个“偷书”的绝佳地方,便是亚马逊的电子书。只要输入 data warehousing, 书中的部分含有 data 或者 warehousing, data warehouse, data warehousing 的相关篇章都能找到。
作为程序员的我们(谁说 SQL 人不会写程序呢?),自然就会想,如果我把所有的项目文件,脚本,或者自己的文字也像上面一样,提供关键字搜索就好了。既然有想法,就实现呗。
大家对正则(regular expression)肯定不陌生,用 c#/java/python, 甚至 VB 套一个壳儿,就能实现类似下面的文件全文关键字搜索了。
那么,问题又来了,如果我想把我的脚本,文章都给大伙分享,只要大家输入关键字,就可以找到对应的文章,是不是很有用呢?
实际上,就是完成 google 学术搜索,亚马逊电子书搜索的功能。但因为可能是好几百人,甚至是上千人会同时来搜,那么类似第三种实时搜索方案就会有性能问题,一来占用大量的磁盘 I/O, 二来CPU运算也会出现瓶颈。
解决这类需求,最好的方式就是将所有可能的关键字组合存储下来,等有类似关键字搜索的时候,直接命中该关键字对应的文件地址,反馈给用户即可。
有的同学会说,用 SQL 数据库的 Like 啊。嗯,没错。那确实可以达到效果.
比如我要找到文章中含有 Python 关键字的所有书籍,可以这么写:
Like '%Python%'
再比如,要找文章中同时含有 Python 和 SQL 关键字的所有书籍:
Like '%Python%SQL%'
当然,如果要找文章中含有 Python 或 SQL 的所有书籍:
Like '%Python%' Or Like '%SQL%'
如果只写到这里,我估计会被大家狠狠的鄙视一下,这不是SQL初学者才写的嘛!再怎么也要提下 SQL 的全文搜索命令:
Contains(Article,"Python" Or "SQL")
(这是 SQL Server 的语法)
但我今天要推荐的是一套开源软件,ElasticSearch, 免费,高速,好用!
下面就开始我们的 ElasticSearch 之旅,第一步极简安装:
第二步,开源客户端,配套惊艳的 Data Visualization
典型的应用就是日志的监控。如果日志放到数据库,查询受到各类搜索需求的制约,造成性能缓慢(如上面的 Like 例子),而 elasticSearch 独有的反向索引,则可以完美解决这个缺点。
还有个特别的功能,高亮显示。当我们要知道某类用户的学习倾向时,比如有多少朋友在搜索 Machine Learning, 通过搜索“用户搜索记录”即可查之。ElasticSearch 为我们在词语级别做好了拆分,比如用户的某次搜索是这样的“我要学习 Machine Learning”, ElasticSearch 的分词器会帮我们将这句拆分成“我,学习,Machine Learning”, 将含有 “我”,“学习”,“Machine Learning”的搜索记录对应起来,存到索引中。当我们在分析用户搜索行为时,分析“Machine Learning”就可以查到对应的用户搜索记录了,并且高亮显示。
第三步,巧妇难为无米之炊,导数据
如何将大量的日志或者文字类数据,导入 elasticsearch 为我们全文检索使用?Logstash 来帮你,甚至你还可以利用它导入 SQL 数据库的内容。简而言之,他就是一个轻量版的 ETL 工具。
不用花费任何多余的软件费用,即可享用全文检索功能,相信你的老板一定会喜欢你推荐的这套 ElasticSearch.

猜你喜欢:
添加个人微信 dbLenis, 诚邀你加入我们的技术讨论群。