solr是一个基于lucene的搜索引擎,lucene是一个全文检索引擎的架构.solr在此之上进行了封装完善,变成了一个很流行实用的搜索引擎,能够应对绝大部分的搜索需求.使用搜索引擎有如下几点好处:html
- 能够减小对数据库的压力,当数据量大或者查询频繁的的时候,频繁的使用查询对数据库资源消耗较大.
- 能够对搜索结果进行权重设置来排序
- 能够结合各类中文分词器,达到理想的搜索效果 例如ik,jecsg,solr自己对英文检索比较准确,可是对中文检索漏洞较多
solr能够依赖jetty容器,也能够依赖在tomcat容器下,安装步骤大同小异,基于自带jetty容器安装步骤传送阵:http://blog.csdn.net/k778899jx/article/details/78121250算法
solr支持自动增量更新,经过简单的配置dataimport.properties文件便可,可是当数据库表大的时候时候最后利用api来,solr自己的自动增量更新须要对时间进行排序,在数据大的时候消耗资源较多,这时候咱们能够本身手动利用api来执行更为安全,效率比solr自己执行要慢上一些.实际运用中,咱们须要对部分字段进行分词搜索,来提升搜索满意度,可是solr自己的分词算法对中文并不友好,能够用其余的中文分词器来结合,传送阵:http://blog.csdn.net/faith_mo_blog/article/details/51784970.ik分词器应对站内搜索比较适用,因此咱们选择了ik做为分词器,须要注意的是ik自12年后做者并无再更新,在最后一版中源码中有一个问题,做者将最细密度算法做为了全局变量,修改为局部变量即可使用智能分词跟最细分词进行切换.后续还遇到了一个问题,在使用中英文分词结合的时候我将英文设为多字母分割后会跟ik的智能分词产生冲突,最后我把英文分词改为以单字母形式便可.没有深究此问题,不明因此然.数据库
当使用多字段搜索,或者须要特定的排序显示的时候,权重功能必不可少,也就是solr的评分设置,solr的评分设置是从lucene移植的,底层是基于TF-IDF算法(https://www.cnblogs.com/yjf512/p/4860134.html).通常设置权重排序有三种方式:api
- 修改底层的boost评分规则,为自身的搜索须要进行定制.
- 在生成索引的时候建一个新的字段来做为权重的标识.
- 利用solr自己的edismax进行评分排序,edismax是dismax的进阶版
solr自己的edismax权重设置是对不一样字段来进行不一样的权重配置,像qf=Title^1.1 Content^0.4这样,若是采用第二种方式则比较灵活,能够对特定的词进行权重设置.tomcat
solr还能够跟zookeeper结合组成分布式的solrcloud,原理并无发生改变,变成solrcloud以后能够提升索引生成的速度,若是对搜索数据的及时性要求较高,能够采用此模式,此模式有一个弊端那就是,采用分布式后,索引数据块存放到各个solr下,在进行分组排序的时候只会对本低地的数据进行排序,因此根据自身状况来使用.安全