内容简介:互联网行业的信息传播能力,因为搜索引擎的出现而成倍增强。作为网站流量的主要来源,谁都无法忽视搜索引擎的作用。搜索引擎公司创造的是当今世界唯一的不直接生产数据,只靠收集和整理数据就能创造更大附加价值的商业模式。哪如果自己实现一个信息收集、加工和整理的搜索引擎是否可行呢?今天我们就聊一聊这个话题。
1、从一个Apache的开源项目Lucene讲起
Lucene是Apache软件基金会长期资助的顶级项目,目的是打造一个开放源代码的全文检索引擎工具包。但是,如果用户直接去使用它,并不好用,因为它不是一个完整的全文检索引擎,而仅是一个引擎的架构,包括:查询引擎和索引引擎等。
Lucene项目最开始于2000年(20年了,打造一个技术不容易吧),采用Java语言编写(算是Java阵营中的精品),从2000年3月的0.0.1版本到目前Lucene的8.4.1版本,经过20年的打磨和升级能一路走下来,我觉得值得大家好好看看这个技术的发展史!
2、开源搜索阵营的绝代双娇
前面讲过直接使用Lucene不太好用,这就好比用户想买的是一辆车,你给人家的是一个发动机,性能再好人家用不上,也就不关心。而基于Lucene核心构建的搜索引擎系统,您首先要知道的就是Solr和ElasticSearch。
Solr和ES都是开源搜索引擎,但是发展的道路不一样。Solr现在同样也是Apache基金会下面的顶级开源项目,基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
而ES是在 Solr 之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有 HTTP Web 界面(REST)和无架构 JSON 文档。ES项目很年轻,发展起来也没那么多顾虑,据说前几年在华尔街融到了很多投资,这几年发展的很快,进入国内市场相当快,虽然软件是开源的,但是基于开源版本提供了很多增值服务(这是一种开源商业模式),什么安全啊,智能监控方面的,可以通过购买不同版本的订阅实现(大概1年好几万吧)。
图1 Solr和ES的比较PS:两个软件我都摆弄过,Solr安装和配置较麻烦,ES更简单(毕竟有商业公司支持),如果我们的目的只是用,那个简单用那个吧!
3、搜索引擎的秘密
文档数据库
ES就是一个典型的文档数据库(或本文数据库),而且还是分布式的。其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
如果你对传统数据库很熟悉,那刚开始用ES的时候需要把原来的概念换一下,比如传统的关系型数据库表-Table,在这里叫索引Index,原来的一行记录,这里叫一个Document,原来写个查询叫SQL,这里叫DSL。
如果说你想用ES去存储照片或者大数据内容,哪并不合适,你还是用传统的关系数据库可能会更好。不过你可以把数据存储位置和照片的URL存储到ES里面,以加快检索的过程。
倒排索引
倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。
倒排索引简单理解就是我们读书或查字典的时候一般后面会有个表,高速你那个概念或词在那一页。以前我们查找数据库是通过一个记录中的某个字段内容,找到这个记录的存储位置。那么倒排后的索引可以让多个特征都对应到一个记录上,画个图就是这样地。
图2 倒排索引的概念那么为啥要倒排呢?因为搜索引擎面对的很多都是人类语言,每一句话通过分词算法处理都会变成一个个词条,这时候查找如果有这个索引,那么通过不同词都可以对应到合适的位置,搜索速度才会快。
4、ES家族的工具集
今天的标题是ELK,说了半天还没解释,那么ELK到底是什么呢?其实是Elasticsearch、Logstash、Kibana的简称。这三者是ES公司开发的核心套件(但不是全部啊)。Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能。
Elasticsearch索引系统
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash日志收集工具
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kinbana可视化
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
图3 ELK产品架构和逻辑关系ELK三剑客,在此全部出来了,图3是他们之间的关系,L采集数据,E存储和检索数据,K是管可视化的。那有些人可能问,这个ELK能干啥,那我的回答是你要展开你的想象力。ELK最传统的应用领域是帮助机群管理人员分析海量的日志,从采集,存储到监控,提供了完整的方案,当然用途绝对不止这些。
如果你看到这里感兴趣了,那马上动手安装试一试吧!
小结:好像看到这里大家发现概念越来越多,没错,要想开始工作首先你得了解现在有那些工作已经做的很好了。找到一个好的梯子,通常是快速实现目标的关键。如果应用ELK相关技术构建行业应用,请关注我们的系列文章,后面会就地震目录查询、可视化和垂直搜索等话题逐渐展开。
网友评论