初探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 ...
随机推荐
- 使用layui在规定的期限内选择日期
这几天碰到了layui中的日期与时间这个,本以为很简单的,可是又一个需求是这样的,有两个日期选择框,第一个日期选择框要求最小日期不得小于当前日期,第二个日期选择框要求最小日期为第一个日期选择框的选中日 ...
- light oj 1152 Hiding Gold
题目: You are given a 2D board where in some cells there are gold. You want to fill the board with 2 x ...
- [UWP]使用Acrylic
1. 前言 在 如何使用Fluent Design System 这篇文章里已经简单介绍过Reveal的用法,这篇再详细介绍其它内容. 自Windows 8 放弃Aero后,群众对毛玻璃回归的呼声一致 ...
- jdbc、Mybatis插入数据主键回显的实现方法
插入数据的时候,往往需要获取主键值.但是有时候主键是自增长的那么,就不太适用手动添加主键值了,此时需要一种可以回显主键参数的方法, 下面以jdbc.mybatis的实现举例 此时使用的是jdbc的话或 ...
- 使用vue框架运行npm run dev 时报错解决
使用使用vue框架运行npm run dev 时报错 如下: 原因: localhost:8080 有可能其他软件占用了,导致其他问题的出现 我们可以动态修改地址 解决: 进入项目文件的config文 ...
- Failed to load the JNI library "E:\JDK6.0\bin\client\jvm.dll"
在打开Eclipse是错误提示:Failed to load the JNI library "E:\JDK6.0\bin\client\jvm.dll" 如图1所示 图1 遇到这 ...
- Python3基础知识之元组、集合、字典
1.元组 元组特点元组是不可变的两个元组可以做加法,不能做减法 元组的方法 >>> S('a', 'b', 'c', 'd', 'e')>>> S=('a','b' ...
- LINUX文件操作命令
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- System包含的信息
System类中的属性值 System.getProperty()方法大全 System.out.println("java版本号:" + System.getProperty(& ...
- 存储管理工具StorageExplorer的基本使用
本文主要介绍Azure StorageExplorer工具的安装及基本使用 1.打开Azure官方链接:https://www.azure.cn/downloads/ 2.按照向导进行安装 3.可以通 ...