初探solr搜索
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).一般设置权重排序有三种方式:
- 修改底层的boost评分规则,为自身的搜索需要进行定制.
- 在生成索引的时候建一个新的字段来作为权重的标识.
- 利用solr本身的edismax进行评分排序,edismax是dismax的进阶版
solr本身的edismax权重设置是对不同字段来进行不同的权重配置,像qf=Title^1.1 Content^0.4这样,如果采用第二种方式则比较灵活,可以对特定的词进行权重设置.
solr还可以跟zookeeper结合组成分布式的solrcloud,原理并没有发生改变,变成solrcloud之后可以提高索引生成的速度,如果对搜索数据的及时性要求较高,可以采用此模式,此模式有一个弊端那就是,采用分布式后,索引数据块存放到各个solr下,在进行分组排序的时候只会对本低地的数据进行排序,所以根据自身情况来使用.
初探solr搜索的更多相关文章
- 关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造)
关于Solr搜索标点与符号的中文分词你必须知道的(mmseg源码改造) 摘要:在中文搜索中的标点.符号往往也是有语义的,比如我们要搜索“C++”或是“C#”,我们不希望搜索出来的全是“C”吧?那样对程 ...
- 什么是Solr搜索
什么是Solr搜索 一.Solr综述 什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. ...
- Solr搜索技术
Solr搜索技术 今日大纲 回顾上一天的内容: 倒排索引 lucene和solr的关系 lucene api的使用 CRUD 文档.字段.目录对象(类).索引写入器类.索引写入器配置类.IK分词器 查 ...
- Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...
- solr搜索应用
非票商品搜索,为了不模糊查询影响数据库的性能,搭建了solr搜索应用,php从solr读取数据
- solr搜索结果转实体类对象的两种方法
问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景. 1.使用@Field注解 @Field这个注解放到实体类的属性[字段]中,例如下面 public class User{ ...
- spring data solr 搜索关键字高亮显示
spring data solr 搜索关键字高亮显示 public Map<String, Object> highSearch(Map searchMap) { Map map = ne ...
- Solr搜索基础
本例我们使用类库和代码均来自: http://www.cnblogs.com/TerryLiang/archive/2011/04/17/2018962.html 使用C#来模拟搜索.索引建立.删除. ...
- 一个Solr搜索实例,增删改查+高亮+分页
今天个人coding的模块测试,所以闲暇之余继续研究solr,然后顺带写了一个实例,随便搞的,solr真心不熟,期待认识热爱搜索的朋友,共同进步. 1.配置schema.xml文件[solr\coll ...
随机推荐
- FTP下载导致Zip解压失败的原因
情形:网关通过FTP下载快钱对账文件时通过Apache下commons-net的commons-net-3.5.jar进行封装,对账文件中有中文和英文的文字,大部分情况下能够下载成功,而且也能解压成功 ...
- POJ 3278 Catch That Cow(模板——BFS)
题目链接:http://poj.org/problem?id=3278 Description Farmer John has been informed of the location of a f ...
- Unity LayerMask
Unity用int32的每一位表示32个层,int32用二进制有32位,Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用.但是它们也可以用来做射线检测时忽略一些collder或Coll ...
- Spark性能调优之合理设置并行度
Spark性能调优之合理设置并行度 1.Spark的并行度指的是什么? spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度! 当分配 ...
- dedecsm系统(企业简介)类单栏目模版如何修改和调用整理
作者:佚名 字体:[增加 减小] 来源:互联网 时间:01-15 17:33:07 我要评论 我们的模版里应该都有article_article.htm这个模版;article_article.htm ...
- Tomcat 源码分析(二)——Request处理全过程
前一篇博客,我总结了Tomcat对于生命周期组件的管理.在了解了容器的启动之后,我们开始剖析它的内部运行机制.今天我们来分析一下Tomcat如何处理Request.Socket作为网络通信的基础也是R ...
- php的底层原理
PHP说简单,但是要精通也不是一件简单的事.我们除了会使用之外,还得知道它底层的工作原理. PHP是一种适用于web开发的动态语言.具体点说,就是一个用C语言实现包含大量组件的软件框架.更狭义点看,可 ...
- Dreamweaver cs6中文版完整安装步骤:
Dreamweaver cs6中文版完整安装步骤: http://www.cr173.com/soft/72633.html 1.首先我们需要下载Dreamweaver cs6官方中文原版安装程序,下 ...
- MySQL 查询最近几天的记录 最近7天的记录 本周内的记录
本周内:select * from wap_content where week(created_at) = week(now) 查询一天:select * from table where to_d ...
- fread读取文件(二进制文件)
fread()是c库函数,利于移植,使用缓存,效率较read()高. 原型: size_t fread(void *buffer, size_t size, size_t count, FILE * ...