谈谈对搜索技术Elastic Search&Lucene的理解
前言
十一一直陪家人,所以也没时间写文章。最近刚好赶上Elastic Search上市,其实在圈子里还是挺轰动的,因为这个也是少数的靠卖开源软件服务上市的公司。大家都知道ES是做搜索服务的,今天就聊聊我对搜索的认识
从业务属性讲
搜索的话,其实是大家接触最多的一类业务。其实说机器学习,其实是一门技术,而搜索是一项业务,机器学习可以应用到搜索业务中去,同时中间件技术、数据库技术等都跟搜索密不可分。
从业务属性上讲搜索的话,在我眼里分为两种。一种是简单的匹配类搜索,一种是业务导向类。前者的追求是最高效率的找到跟输入信息匹配的内容,Google、百度做的事情就是这种。业务导向型,更多地是将搜索赋予业务逻辑,比如A在电商平台搜索以一个包,电商平台可以根据A的消费能力去匹配最合适的产品,甚至返回的不是包而是一个跟包搭配的裙子。
倒排索引/正派索引
真正的搜索业务不会是暴力的从全部数据中遍历搜索的。一定是将一类数据建成索引。倒排或者正排表示的是索引建立的方法,这个索引建立也就是数据建模过程,是搜索系统的核心。
上图是一种索引关系,正排索引是以Document,也就是文章ID为主key,如果要搜索某个关键词,需要遍历每一篇文章,搜索的时候计算量很大,好处是建模容易。
倒排索引就是以词为主key,搜索的时候找到词之后返回这个词所在的文章。这种方式搜索的时候计算量小,建模比较难。倒排索引也是目前的主流搜索索引建模方法。
Lucene
Lucene是非常有名的搜索引擎了,包含下面的整套架构,从上面提的索引创建,到用户的访问。
Elastic Search其实是在这一套上面做了分布式服务,规范了各种访问和查询接口,支持多点容灾和查询。
未来的搜索
现在的搜索其实已经内嵌了很多机器学习相关的组件,比如建索引的时候会有分词、文本理解相关的应用。未来随着人工智能的发展我觉得搜索这项业务的本质会发生变化。
现在搜索做的事情是匹配用户输入的信息和世界上已经存在的信息。未来随着类似于深度学习GAN模型的发展,或者其它生成类技术的发展。
搜索会变成自动生成用户输入的内容,比如现在用户输入“黄片儿”,搜索引擎是利用爬虫去找已经存在的黄片,未来可能就直接现场人工智能造一个黄片返回,甚至能根据用户习惯自定义。
这个就是想说的内容,未来机器学习在搜索领域一定大有可为,持续关注这个业务方向~
阅读更多- Lucene/Solr/ElasticSearch搜索问题案例分析
- Elasticsearch aggregations 理解
- 分布式搜索Elasticsearch——创建客户端(六)
- org.apache.lucene.search.Hits.java搜索索引
- 分布式搜索方案选型之五(终篇):Elasticsearch
- 实时搜索 elasticsearch vs solr
- 分布式搜索Elasticsearch——集成paoding-maping
- 搜索学习--Elasticsearch全文搜索服务器的基本使用
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)+Redis+Syslog-ng实现日志实时搜索
- Elasticsearch Java API(八)--搜索有相同父id的子文档
- Solr vs Elasticsearch vs Lucene
- lucene 搜索search
- ElasticSearch + Canal 开发千万级的实时搜索系统
- 使用Zend_Search_Lucene实现频道搜索
- 分布式搜索Elasticsearch——QueryBuilders.matchQuery
- PHP通过API搜索elasticsearch只获得10条数据
- Solr vs Elasticsearch vs Lucene
- 10、索引库的查询四之:Lucene的高级搜索技术
- Elasticsearch in java范例:索引文本数据、搜索文本数据入门
- ElasticSearch—通过Elasticsearch RestFul搜索查询