当前位置:首页 > solr技术方案
Solr技术方案
一 用户需求
以前的互动平台只能对固定表的固定字段做like这样的数据库层面的索引,性能低下,用户体验很差,很难满足业务提出的简化搜索的需求。 需求原型:
业界通用的做全站搜索的基本上两种:
1 选择googleAPI,百度API做。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,而且全站的SEO做的也不是很好,对于动态的很多ajax请求需要做快照,所以暂时不采用。 2 选择现有成熟的框架。
这里我们选择使用solr。
Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。 这里我们主要需要以下几种功能: 1 可用性及成熟性。 2 中文分词。
3 词库与同义词的管理(比如我们使用最高的:股票代码)。 4 高亮显示。 5 方便的导入数据。 6 Facet的轻松配置 7 扩展性。
二 Solr的体系结构
体系结构
Solr体系,功能模块介绍及配置。
以上是solr的架构图。具体应用时需要理解一下模块的作用及配置。
RequestHandler:接受请求,分发请求。另外也包含导入数据,如importhandler。 UpdateHandlers – 处理索引请求。
Search Components:作为handlder的成员变量。处理请求。 Facet:分类搜索
Tika:apache下处理文件的一个项目。 Filter,spelling : 处理字符串
Http query/update Database/html importhandler 默认基本可以满足要求。如果不够则扩展相应的handler和component。
丰富的客户端
Ruby/php/java/json/javascript 使用solrj
以上的配置在solrconfig.xml,schema.xml中配置
分词的解决办法
系统提供了很多种分词方案。
StopAnalyzer,StandardAnalyzer,WhitespaceAnalyzer只是实现了数字、单词、E-mail地址、IP地址以及中文字符的分析处理,但是对于中文的分析并不好。 对于中文分词有几种解决方案。
? Paoding: 100万汉字/s(https://code.google.com/p/paoding/)
? Imdict: 26万汉字/s (https://code.google.com/p/imdict-chinese-analyzer/) ? Ik: 160万汉字/s (https://code.google.com/p/ik-analyzer/)
? Mmseg4j: simple 1900kb/s 准确率98%(https://code.google.com/p/mmseg4j/) 注:官方提供测试环境各不相同。 这里我们选择准确率最高的Mmseg4j。
而且配置起来也十分简单。我们只是需要在schema中配置以下fieldType即可。
共分享92篇相关文档