Solr -企业级搜索引擎
2011-03
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
Lucene 回顾
用Java编写的全文信息检索工具包,提供了基本的API 使用倒排索引技术,极大提高了检索效率
让最相关的头100条结果满足98%以上用户的需求
Score = tf* idf* lengthNorm
org.apache.lucene.document、analysis、index、search 应用jive、eclipse、linkedin(bobo、zoie)、twritter(NRT)
Lucene 回顾
Lucene索引结构
•Segment
•Document
•Filed
•Term
lucene搜索原理
•分词、中文分词
机械分词:一元、二元、基于词库的分词
•未登录词识别:机构名、人名、神马
•歧义词
基于统计:HMM
•样本
•索引
国家:{1,3,6,8,}
上海:{3,7,16,17}
法规:{1,6}
人民:{3,9,16,20}
•搜索
1.搜索:上海人民
2.解析为:’上海’ and ‘人民’ ,表示搜索同时出现’上海‘和’人民’的文档
3.可以搜索出第3 和第16篇文档
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
Solr历史
2004年CNET开发Solar,为CNET提供站内搜索服务
2006年1月捐献给Apache ,成为Apache的孵化项目
一年后Solr孵化成熟,发布了1.2版,并成为Lucene的子项目
2010年6月solr发布了最新的1.4.1版,这是1.4的bugfix版本
如今Solr已经广为人知,并且许多公司都已经使用Solr去构建自己的搜索引擎:
AOL、Disney、Apple, Inc、阿里巴巴、安居客……
什么是Solr
Search on lucene w/Replication
一个基于Lucene的全文搜索服务器
提供了基于Http的Rest-like操作接口
高可扩展的开放架构
提供了强大的WEB管理界面
有多种客户端:Ruby 、PHP 、Java 、Python 、.NET 、Perl 、JavaScript 索引复制
更方便的使用停用词、同义词等
易于集成、几乎不用写代码就能适应一般的需求
Solr feature list
提供了丰富的查询缓存
很容易的为本地以及远程的数据创建索引,DataImportHandler 对Rich Document(word、pdf、ppt……)进行解析和创建索引
快速增量更新索引,并复制到其他机器上
层面搜索
More like this、Spelling suggestions、Auto-suggest……
高度的可扩展性
NearRealtimeSearch
Solr 可扩展的插件
SolrRequestHandler
Highlighting
QueryResponseWriter
Similarity
CacheRegenerator
Analyzer
SolrEventListener
UpdateHandler
Solr Core Solr Architecture
Lucene
Admin Interface Standard Request Handler Custom Request Handler Update
Handler
Caching
XML Update Interface Config Analysis HTTP Request Servlet Concurrency
Update Servlet
XML
Response Writer Replication Schema
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
认识Solr
Solr 安装
Solr 自带示例, 索引与搜索(增删改查)
Solr admin page
配送地址库搜索示例(DataImportHandler)
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
集成Solr
与java应用集成文档
•CommonsHttpSolrServer
•EmbeddedSolrServer .net
•SolrNet
•SolrSharp
Javascript
•JQuery Autocomplete
•SolrJs
Others
•Php
•Ruby on rails
•Perl
•Python
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
扩展Solr 之水平扩展
•由于高并发导致响应速度变慢
时,可以选择对solr进行水平扩
展。
•通过Solr的Replication将索引复
制到多台服务器上
•对多台search Server做load
balance
扩展Solr 之Sharding
•由于索引文件过大时,并且
在并发不高的情况下,访问
速度变慢。
可以考虑将索引
文件进行切分并分布式部署,
使用Solr的DistributtedSearch
进行搜索。
扩展Solr 之深度扩展
•做了sharding仍不能满足我
们的需求时:
•对sharding做集群
进一步扩展
Integrating Solr and ZooKeeper
•ZooKeeper是Hadoop的正式子项目
•是Google的Chubby一个开源的实现
•它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、群组服务等。
ZooKeeper的目标就是封装好复杂易出错的
关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Katta integration with Solr
•Katta integration with Solr allows Hadoop indexing into shards, which are replicated to N nodes/servers of a Solr cluster. This is useful for large Solr clusters that require
failover, replication and the ability to provision shards dynamically. Katta uses
Zookeeper to coordinate the creation and deployment of shards to Solr servers.
Solr –企业级搜索引擎
•lucene回顾
•solr简介
•认识solr
•集成solr
•扩展solr
•solr使用场景
Solr 使用场景讨论
Lucene
提供了全文检索的基本API
优点:灵活,API较简单,容易上手
缺点:实际应用时需要做大量的开发:数据的获取、增量索引、索引备份……
Solr
对Lucene进行了封装,几乎不用做任何二次开发即能构建一套站内搜索引擎
优点:提供了各种各样的特性,可扩展性强,快速的构建应用
缺点:shard策略需要自己去写、分布式搜索时相关性排序问题,有时需要二次开发 Nutch
一个完整的搜索引擎,包含爬虫、索引、搜索。
使用了Hadoop,Map/Reduce做海量
数据的并行处理、hdfs分布式文件系统存储中间计算结果及索引文件。
谢谢大家。