The palest ink is better than best memory——好记性不如烂笔头。2012补记
一、需求:
实现O2O公司站内商品搜索(当前是数据库Like模糊查询),提高用户体验
二、方案:
1) 基于Lucene自己进行封装实现。工作量大及扩展性差(除非自己很牛X,封装一个如Solr一样的),故不采用。
2) 调用Google、Baidu的API实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,感觉太不靠谱。
3) 基于Compass+Lucene实现站内搜索。适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装。
4) 基于Solr实现站内搜索。封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案。
5) 基于ElasticSearch(和Solr一样都是基于Lucene,话说分布式索引较Solr要好,2012还不太活跃,资料相对较少)
基于上述几种方案综合分析,对于我们公司的搜索引擎方案,我采用了solr来实现。
三、实施:
分析:
1.业务分析,以活动为导向
2.只索引在线商品
3.注意业务上一对多关系处理
4.定义好索引结构(需要索引的字段——稳定)
5.选择好中文分词器
6.定义所需数据类型
7.定义好各field索引、分词、存储策略
8.注意特殊字段数据类型选择,如需Group
9.约定组合词
10.索引更新、删除(定时任务/MQ)系统结构&交互:
Solr重要配置文件:
1.solr/home :应用服务器中或web.xml
2.solr.xml:配置索引多core、指定索引目录
3.schema.xml:相当于数据表配置文件,它定义了加入索引的字段的数据类型、分词策略等
4.solrconfig.xml:指定 Solr 如何处理索引、高亮显示配置、缓存配置以及其他请求等技术要点:
1.索引更新机制
2.分词、词库、过滤词选择
3.使用Luke工具查看、分析索引分词效果
4.Solr Suggestion / Facet实现搜索智能提示
5.Highlighter 或 FastVectorHighlighter 实现高亮显示
6.使用geohash实现附近商铺实现效果: