2015-09-08  上午

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1:solr简介
solr是一个开源的搜索引擎,是对lucene做了封装,对外提供类似于webservice接口,
可以使用http请求的方式对solr进行操作。

lucene、solr、elasticsearch是java领域比较常用的搜索工具。

lucene比较底层。
solr对lucene做了封装,可以简单的实现一个站内搜索功能,solr4.0之后
出现了solrcloud,也支持分布式存储和搜索。
elasticsearch对lucene做了封装,并且elasticsearch是天生支持分布式的。

2:solr的特点
通过http协议对solr进行操作
增加了缓存功能,查询更快
提供的有web界面
支持结果分类(fact),类似于数据库中的groupby
支持分布式(solrcloud)

3:solr安装部署启动

必须先安装JDK,并设置JAVA_HOME环境变量,jdk的版本不能低于1.7
下载,解压,启动
cd /usr/local
tar -zxvf solr-4.10.4
cd solr-4.10.4/example
java -jar start.jar
solr启动之后默认监听8983端口,可以访问http://ip:8983/solr进行访问验证

4:solr的两种启动方式
1):java -jar start.jar
默认在前台启动。
后台启动:java -jar start.jar --daemon &(这样启动之后只能kill杀进程)
后台启动:java -DSTOP.KEY=solr -DSTOP.PORT=8984 -jar start.jar --daemon &
针对这种启动方式,可以使用下面命令停止solr
java -DSTOP.KEY=solr -DSTOP.PORT=8984 -jar start.jar --stop

指定端口启动solr
java -Djetty.port=8984 -jar start.jar
2):bin/solr start
默认在后台启动,使用bin/solr start -f可以在前台启动
指定端口启动:bin/solr start -p 8984

停止solr:bin/solr stop -p 8984或者 bin/solr stop -all

查看启动的solr服务:bin/solr -i

注意:solr脚本启动底层也是调用了start.jar

3):使用tomcat启动solr
暂时不建议使用,可以参考PPT或者提供的文档<使用tomcat启动solr.txt>

5:solr-web项目位置

默认情况下,使用java -jar start.jar启动solr的时候,会在当前目录下的webapps目录
下面找solr.war,并且还会把这个项目解压到当前目录下的solr-webapp/webapp目录下。

如果使用的是bin/solr脚本启动的话,会默认到SOLR_HOME下面找example目录(通过脚本可以发现),
会找这个目录下面的webapps/solr.war 解压到solr-webapp/webapp目录下,

如果修改了SOLR_HOME下面的example文件名(mv example crxy)
那么使用java -jar start.jar 方式启动没问题。
使用bin/solr启动则会报错。

所以需要在启动的时候指定一下修改之后的文件夹名称
bin/solr start -d crxy

6:solr中的solr.solr.home属性
这个属性指定了solr core的根目录。
默认情况下会找exampl下的solr目录。

如果这个目录的名称被修改了之后,使用bin/solr脚本启动的时候就必须要指定了
假设把名称改为 solr2
mv expample/solr example/solr2
则执行是需要这样指定
bin/solr start -s solr2

如果使用tomcat启动的话,可以参考<使用tomcat启动solr.txt>设置这个属性。

7:solr启动总结
使用java -jar start.jar方式启动的时候
默认会在当前目录下的webapps/下面找solr.war
会在在当前目录下的solr中找solr core的配置信息

使用bin/solr脚本启动的话
默认是在example下面找solr的web项目和sorl core的根目录。

8:solr管理界面
如果使用的IE版本过低的话,访问会报错。
访问地址:http://ip:port/solr

9:向solr中索引数据
先使用sorl提供的测试数据
cd solr-4.10.4/example/exampledocs
java -jar post.jar hd.xml

这样会向solr中添加两条数据。

注意:这个索引过程会找本机的solr服务,使用http://localhost:8983/solr/update 进行访问。

10:schema.xml文件分析
field:定义字段的一些基本属性,字段名称,字段类型,是否存储,是否建立索引。。。
dynamicField:动态字段,可以通过提前设置一些动态字段,实现后期动态增加字段。
动态字段的名称可以使用通配符,一般使用*,这个*只能在名称的前面或者后面。
不能单独使用*。
uniqueKey:设置主键字段。
copyfield:拷贝字段。可以把多个字段的内容拷贝到一个字段中,方便后期查询。
fieldtype:在field标签中,type属性的值就是在这定义的。可以设置一些字段的解析方式。

————————————————————————————————————————————————————————————————————

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

————————————————————————————————————————————————————————————————————
2015-09-08  下午

1:solr-web界面的查询
qt:使用哪种查询接口
q:表示查询条件
默认使用key:value格式,*:* 可以查询所有数据
1. “:” 指定字段查指定值,如返回所有值*:*
2. “?” 表示单个任意字符的通配
3. “*” 表示多个任意字符的通配
4. 布尔操作符AND、&&(必须是大写)
5. 布尔操作符OR、||(必须是大写)
6. [] 包含范围检索,如检索某价格区间,包含头尾,price:[0 TO 100]
7. {} 不包含范围检索,如检索某价格区间,不包含头尾price:{0 TO 100}

fq:过滤查询,过滤后的结果和q的查询结果取交集,这个查询结果会生成缓存。

sort:排序 name asc 或者 name desc

start:查询数据的起始位置,默认是0
rows:表示一次查询多少数据,默认是10

fl:表示查询数据的哪些字段内容,类似于select id,name form table.
里面多个字段用逗号分割,例如:id,name

df:默认查询字段,当在q中查询时不指定查询字段,则默认会查询默认字段,
默认字段是text,在solrconfig.xml中可以看到。

Raw Query Parameters:查询语句,后面会把facet中的多个查询条件在这指定

wt:数据的展现类似,默认是json格式

ident:是否对展示的数据进行格式化

hl:高亮字段,需要高亮的字段的store属性必须是true。还必须要有主键字段。
对于multiValued=true的字段不要设计高亮显示
因为solr对于这个字段里面的多个值只会返回匹配高亮的那个值
高亮时记得你的schema.xml文件中要配主键(<uniqueKey>id</uniqueKey>)
因为solr对高亮的设计是,高亮部分跟结果集部分是分开返回的,
如果没有配主键,那么高亮部分就无法和结果集匹配,不能够确定高亮的
是哪条记录的。

facet:分组统计,类似于sql中的groupby。
可以根据过滤条件进行分组统计
还可以根据字段的值进行分组统计,并且还可以对字段的内容进行过滤。

spell:拼写检查
使用的时候需要把qt改为/spell,当查询的关键字输入错误的话,
solr会在索引库中查找和当前关键字类似的关键字。

如果给solr添加过IK分词工具后,再使用这个查询,会报错,提示使用的analysis不一样。
解决方法:
注意:在整合IK的时候,我把schema.xml中的text字段的类型改为了text_ik.
1:修改/usr/local/solr-4.10.4/example/solr/collection1/conf/solrconfig.xml文件中的1315行,改为<str name="queryAnalyzerFieldType">text_ik</str>
2:修改/usr/local/solr-4.10.4/example/solr/collection1/conf/schema.xml文件中的name字段的type属性,改为<field name="name" type="text_ik" indexed="true" stored="true"/>

2:solr索引和查询
注意:在建立索引和查询的时候要使用相同的分词器。

3:中文分词器简单介绍
大概可以分为,单字分词、二分法分词、词库分词、
词库分词是比较理想的分词类型。所以在这我们使用IKAnalyzer

4:整合IK中文分词器
1:下载IK的压缩包
2:解压
3:把压缩包中的IKAnalyzer2012FF_u1.jar拷贝到solr-web项目的lib目录中
cp IKAnalyzer2012FF_u1.jar /usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/lib
4:把ik的配置文件和停用词库拷贝到solr-web项目的类路径下面,
注意:类路径指的是solr-web项目下面的WEB-INF/classes目录,但是这个目录不存在,所以需要创建。、
mkdir -p /usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes
cp IKAnalyzer.cfg.xml /usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes
cp stopword.dic /usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes

5:现在虽然把IK整合到solr中了,但是还没有用到,需要新增一个fieldtype,指定给某一个field

修改schema.xml文件
cd /usr/local/solr-4.10.4/example/solr/collection1/conf
vi schema.xml
(添加下面配置)
<!--配置IK分词器-->
<fieldType name="text_ik" class="solr.TextField">
<!--索引时候的分词器-->
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<!--查询时候的分词器-->
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
(修改text字段的类型,修改之后的配置如下:)
<field name="text" type="text_ik" indexed="true" stored="false" multiValued="true"/>

6:重启solr
cd /usr/local/solr-4.10.4/example
java -jar start.jar

7:验证,到solr-web界面中验证
http://ip:8983/solr

在core selector中选择collection1,再选择analysis,在Field Value (Index)框中输入【我们是中国人】
,然后选择Analyse Fieldname / FieldType 中的text字段,最后点击analuse value按钮

8:添加自定义词库
在本地windows机器上创建文件 my.dic 在里面添加一行【超人学院】
注意:在保存的时候要确认文件的编码必须是UTF-8 without bom模式的。

把这个文件上传到solr-web项目的类路径下面,就是下面的目录
/usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes

还需要修改IK的配置文件
vi /usr/local/solr-4.10.4/example/solr-webapp/webapp/WEB-INF/classes/IKAnalyzer.cfg.xml
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典-->
<entry key="ext_dict">my.dic;</entry>

<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>

最后重启solr,java -jar start.jar
再按照第7步进行验证,只要能把超人学院这个词给分出来就说明自定义成功了。

IK的注意事项
注意IKAnalyzer.cfg.xml和相关.dic词库文件的位置
需要放在solr web应用WEB-INF/classes目录下
classes目录不存在,需要手动创建
看到图片中的文字才说明配置成功
如果命令行显示词典加载成功,但是分词的时候却没有效果,可能是下面原因
文件格式必须为Encode in UTF-8 without BOM
建立索引库和搜索索引库都会使用分词器,所以当改变分词器的时候,需要重新建立索引库

5:solr的多core模式

新增
1:在指定目录下面拷贝一份collection
cd /usr/local/solr-4.10.4/example/solr/
cp -r collection1 collection2

rm -rf collection2/core.properties

2:到web界面进行添加
core admin--->add core

修改下面这些配置
name : collection2
instanceDir : collection2(在solr.solr.home路径中必须要有collection2目录)
dataDir:data(在collection2中要有data目录)
config:solrconfig.xml
schema:schema.xml

点击add core 即可。

这个流程不需要重启solr服务器。

添加之后会发现,在collection2这个目录中会有生成一个core.properties文件,里面保存的core的名称以及其他信息。

修改core的名称
rename按钮,可以修改core的名称,
注意:这里的修改名称,只会修改对应collection目录中的core.properties中的name属性的值,不会修改服务器上collection目录的名称。

取消core
unload 按钮
这个取消只会把对应collection中的core.properties文件改名字,不会删除对应的collection

6:java操作solr,使用solrj
在项目的pom文件中引用solrj的maven依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.4</version>
</dependency>
具体代码参考solrTest.java

注意:在执行的过程中会报错,需要添加common-logging的依赖
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>

Solr学习和总结(线下1)的更多相关文章

  1. Wonder第一期3D引擎和编辑器线下培训班报名开始啦(免费学习)

    Wonder第一次举办 针对3D底层技术的 线下培训班,免费学习,请大家多多支持-感谢- 培训地点 成都 开课时间 报名满5人开课. 报名方式 加QQ群:732861508 备注请写:报名培训 老师介 ...

  2. solr学习笔记-linux下配置solr(转)

    本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...

  3. ABP(现代ASP.NET样板开发框架)主题线下交流会(上海)开始报名了!

    点这里进入ABP系列文章总目录 ABP主题线下交流会(上海)开始报名了 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.它是采用最佳实践和流行技术 ...

  4. Solr学习总结(五)SolrNet的基本用法及CURD

    上一篇已经讲到了Solr 查询的相关的参数.这里在讲讲C#是如何通过客户端请求和接受solr服务器的数据, 这里推荐使用SolrNet,主要是:SolrNet使用非常方便,而且用户众多,一直都在更新, ...

  5. Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引

    Solr学习笔记之3.Solr导入SQLServer数据建立索引 一.下载MSSQLServer的JDBC驱动 下载:Microsoft JDBC Driver 4.0 for SQL Server ...

  6. Solr学习笔记之1、环境搭建

    Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...

  7. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  8. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...

  9. Solr学习(2) Solr4.2.0+IK Analyzer 2012

    Solr学习(二) Solr4.2.0+IK Analyzer 2012 开场白: 本章简单讲述如何在solr中配置著名的 IK Analyzer 分词器. 本章建立在 Solr学习(一)  基础上进 ...

  10. 南京.NET线下活动后续—一对一技术交流

    4月1日星期六,发生了几件大事: 1.网民与老板花式斗图,庆祝愚人节. 2.国务院设立雄安新区,定为千年大计 3.纳龙科技的程序猿赴镇江斯诺物联科技进行一对一技术交流. 此次一对一交流活动是3月11日 ...

随机推荐

  1. selenium + python 怎样才能滚到页面的底部?

    可以用 execute_script方法来处理这个. 调用原生javascript的API,这样你想滚到哪里就能滚到哪里. 下面的代码演示了如何滚到页面的最下面:   driver.execute_s ...

  2. ASM_Oracle ASM的常用命令(汇总)

    2014-07-02 Created By BaoXinjian

  3. WM_MOUSELEAVE 和 WM_MOUSEHOVER 使用

    原文链接: http://www.cnblogs.com/weiqubo/archive/2011/04/14/2016323.html 默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM ...

  4. JavaScript - 返回头部

    制作浮动top $(window).scroll( function() { var scrollValue=$(window).scrollTop(); scrollValue > 600 ? ...

  5. MyBatis generator 使用方式 小结

    1.  配置到 maven 中pom.xml 中 2.  手动运行 脚本文件 3. 基于 web 项目  http://git.oschina.net/redArmy/springboot-gener ...

  6. MySQL数据分组GROUP BY 和HAVING

    对于分组的理解,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作. 举例如下:在产品表中,检索每一个供应商提供的商品的数量. mysql> SELEC ...

  7. mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案

    为什么配置skip-name-resolve? 由于mysql -h${ip} 远程访问速度过慢, mysql -uroot -p123456 根据网友经验(https://www.cnblogs.c ...

  8. PHP利用MySQL保存session(php5.4之前的处理)

    简介 使用MySQL保存session,需要保存三个关键性的数据:session id.session数据.session生命期. 考虑到session的使用方式,没必要使用InnoDB引擎,MyIS ...

  9. Xilinx ISE Design Suite 14.7 ISim 简单仿真

    1.创建完项目(以Xilinx ISE Design Suite 14.7开发流程的例子    led例子   为例),编译通过,我们就可以对这个项目进行仿真: 2.然后切换到simulation,然 ...

  10. C++11 随机数

    C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...