solr是一个基于lucene的搜索引擎,lucene是一个全文检索引擎的架构.solr在此之上进行了封装完善,变成了一个很流行实用的搜索引擎,可以应对绝大部分的搜索需求.使用搜索引擎有以下几点好处:

  • 可以减少对数据库的压力,当数据量大或者查询频繁的的时候,频繁的使用查询对数据库资源消耗较大.
  • 可以对搜索结果进行权重设置来排序
  • 可以结合各种中文分词器,达到理想的搜索效果 例如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).一般设置权重排序有三种方式:

  1. 修改底层的boost评分规则,为自身的搜索需要进行定制.
  2. 在生成索引的时候建一个新的字段来作为权重的标识.
  3. 利用solr本身的edismax进行评分排序,edismax是dismax的进阶版

  solr本身的edismax权重设置是对不同字段来进行不同的权重配置,像qf=Title^1.1 Content^0.4这样,如果采用第二种方式则比较灵活,可以对特定的词进行权重设置.

  solr还可以跟zookeeper结合组成分布式的solrcloud,原理并没有发生改变,变成solrcloud之后可以提高索引生成的速度,如果对搜索数据的及时性要求较高,可以采用此模式,此模式有一个弊端那就是,采用分布式后,索引数据块存放到各个solr下,在进行分组排序的时候只会对本低地的数据进行排序,所以根据自身情况来使用.

初探solr搜索的更多相关文章

  1. 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)

    关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...

  2. 什么是Solr搜索

    什么是Solr搜索 一.Solr综述   什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...

  3. Solr搜索技术

    Solr搜索技术 今日大纲 回顾上一天的内容: 倒排索引 lucene和solr的关系 lucene api的使用 CRUD 文档.字段.目录对象(类).索引写入器类.索引写入器配置类.IK分词器 查 ...

  4. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  5. solr搜索应用

    非票商品搜索,为了不模糊查询影响数据库的性能,搭建了solr搜索应用,php从solr读取数据

  6. solr搜索结果转实体类对象的两种方法

    问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景. 1.使用@Field注解 @Field这个注解放到实体类的属性[字段]中,例如下面 public class User{ ...

  7. spring data solr 搜索关键字高亮显示

    spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...

  8. Solr搜索基础

    本例我们使用类库和代码均来自: http://www.cnblogs.com/TerryLiang/archive/2011/04/17/2018962.html 使用C#来模拟搜索.索引建立.删除. ...

  9. 一个Solr搜索实例,增删改查+高亮+分页

    今天个人coding的模块测试,所以闲暇之余继续研究solr,然后顺带写了一个实例,随便搞的,solr真心不熟,期待认识热爱搜索的朋友,共同进步. 1.配置schema.xml文件[solr\coll ...

随机推荐

  1. [国嵌攻略][044][初始化Bss段]

    BSS段的作用 1.变量存储的空间 初始化的全局变量:数据段 未初始化的全局变量:BSS段 局部变量:栈 动态分配变量:堆 2.为什么要对BSS段初始化 未初始化的全局变量在使用时才被赋值,未了避免在 ...

  2. HDU 1213 How Many Tables(模板——并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday ...

  3. C++ enum用法小技巧

    enum DeviceDataType :int    {        None = 0,              SourceRGBA32 = 1,               Keying = ...

  4. UE4 UnLoadStreamLevel

    今天测试发现一个bug记录一下,如果把某一个子关卡的加载方式设置为Always Loaded时,调用UnloadStreamLevel时不会执行Completed后面的节点,也就是一直没有完成.

  5. Hibernate查询对象的方法浅析

    Hibernate 查询对象是根据对象的id查询的,只要你有id (id唯一),则无论你是否其他字段与传过来的对象一致,都会查到该id在数据库对应的对象.若是在关联查询中,所关联表的id为空,即所查表 ...

  6. html_栏目下拉

    ========================================================= =================[ 下拉栏目菜单 ]=============== ...

  7. @为Java注解

    spring的@service(创建对象)@Autowired(自动装配)

  8. mysql索引使用注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  9. MYSQL GROUP BY Optimization

    GROUP BY Optimization 常规的匹配group by(分组)操作子句是扫整表并且创建包含连续的分组行的临时表, 利用临时表得到group数据,运用appregate function ...

  10. Oracle内连接、外连接、右外连接、全外连接小总结

    数据库版本:Oracle 9i 表TESTA,TESTB,TESTC,各有A, B两列 A B 001 10A 002 20A A B 001 10B 003 30B A B 001 10C 004 ...