初探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 ...
随机推荐
- 《JavaScript设计模式与开发实践》知识点笔记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px ...
- IDEA安装vue开发插件
前言: 开发免不了要用到开发工具,什么sublime,webstorm,idea的,现在我就说下idea开发神器下安装vue插件进行vue项目的开发吧. idea下载地址:http://www.jet ...
- win7系统如何在防火墙里开放端口
用到的端口需要在防火墙里开放,win7的比XP的要复杂一些,此方法同样适用于server2008系统 方法/步骤 1 依次点击"开始"-"控制面板"-" ...
- 邓_ Jqery·笔记本【照片】
-------------------------------------------------------------------------------------------- [PHP] - ...
- 【编程技巧】alert vs Ext.Msg.alert
alert会阻塞程序的运行. Ext.Msg.alert是异步的,它的调用并不会停止浏览器中代码的执行.
- MapReduce 原理与 Python 实践
MapReduce 原理与 Python 实践 1. MapReduce 原理 以下是个人在MongoDB和Redis实际应用中总结的Map-Reduce的理解 Hadoop 的 MapReduce ...
- python装饰器实现对异常代码出现进行监控
异常,不应该存在,但是我们有时候会遇到这样的情况,比如我们监控服务器的时候,每一秒去采集一次信息,那么有一秒没有采集到我们想要的信息,但是下一秒采集到了, 而后每次的采集都能采集到,就那么一次采集不到 ...
- php foreach用法和实例
原文地址:http://www.cnblogs.com/DaBing0806/p/4717718.html foreach()有两种用法:1: foreach(array_name as $value ...
- The server's host key is not cached in the registry. You have no guarantee that the server……
使用putty中的pscp.exe ,可以通过脚本方式实现windows向linux上传文件,但pscp.exe第一次运行时必须手工输入确认信息,本文主要解决掉初次运行时的人工交互,彻底实现静默运行. ...
- Linux指令--wget
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...