Solr实现站内搜索

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重要配置文件:
    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实现附近商铺

  • 实现效果:
    Solr实现站内搜索_第2张图片

  • 源码:
    Git:https://github.com/Aresyi/XdSearch.git

你可能感兴趣的:(岁月足迹,Java)