介绍
solr6.2.0单击版环境搭建
Solr6.2.0学习流程
搭建solr单击版环境
以下内容为单机版tomcat+solr操作
1、所需软件
1.1软件版本:
jdk1.8.0_121 solr6.2.0 eclipse-jee-neon-1a-win32-x86_64 apache-tomcat-8.0.41-windows-x86-x64 备注:如果你的tomcat小于8的话,启动后访问solr admin会遇到异常: Java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished() ;如果你启动时看到这个,恭喜你,该升级tomcat了,换成8就OK了。
2、解压目录
2.1 apache-tomcat-8.0.41-windows-x64目录
2.2solr6.2.0目录
2.3 jdk1.8.0_121目录
3 、环境配置
3.1在我们之前配置好的tomcat的webapp目录下新建一个solr的文件夹
3.2拷贝solr6.2.0包下面server/solr-webapp/webapp中的内容到tomcat新建的solr文件夹下
3.3拷贝solr6.2.0下面server/lib/ext中的jar包到新建的solr下面的WEB-INF\lib中
3.4拷贝solr6.2.0下面server\resources中log4j.properties到新建的solr的WEB-INF中
3.5修改solr\WEB-INF中的web.xml文件
将注释的<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>F:\solr\soft\apache-tomcat-8.0.41-windows-x64\webapps\solr_home(你的solr_home)</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
放开,并将其中的值修改为你的solrhome目录(solrhome目录主要配置索引存储路径,路径可自行选择)。
最后复制solr-6.2.0\server\solr中的所有文件到solr_home中;如
备注:此处的solr的根目录和solr_home是两回事,solr_home文件夹是用来存放索引的,所以solr_home可以在任意文件夹下存在。
4、测试运行
4.1启动tomcat
访问首页:http://localhost:8080/solr/index.html
数据增量(DIH)
以下内容为数据增量操作
5、创建Core Admin
5.1创建my_core
在solr_home文件夹下新建一个文件夹名字叫做my_core(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联。)然后把官网下下来的solr项目中F:\solr\soft\solr-6.2.0\example\example-DIH\solr\solr\conf文件夹的内容全部复制到my_core中。
6、配置相关包及其路径
6.1把WEB-INF\lib里面的jar包配置到项目中
把mysql所需的jar包和solr-6.2.0\dist下的solr-dataimporthandler-6.2.0.jar和solr-dataimporthandler-extras-6.2.0.jar都复制到solr\WEB-INF\lib下。然后在solr_home\my_core\conf\solrconfig.xml文件中加入:<lib dir="F:/solr/soft/apache-tomcat-8.0.41-windows-x64/webapps/solr/WEB-INF/lib/" regex=".*\.jar" />这段代码大约在solrconfig.xml的75行处,前面有一堆类似的代码。
7、建立数据库表
7.1在MYSQL中新建一张表
8、添加solr-data-config.xml
8.1在solrconfig.xml中添加data-config.xml
8.2在conf下新建data-config.xml文件
8.3在conf文件下的managed-schema配置field信息
9、测试
9.1启动tomcat并访问
启动tomcat,并在URL中输入http://127.0.0.1:8080/solr/index.html 路径。
9.2新增core
点击Core Admin à name àinstanceDir(my_core的路径)àdataDir(默认data)àconfig(默认)àschema(默认) 说明几点: name:新建的core的名称(与5.1的名称保持一致my_core) instanceDir:就是你的core根目录,solr就是你的SOLR_HOME,你可以在SOLR_HOME下创建多个core目录,(与5.1保持一致F:\solr\soft\apache-tomcat-8.0.41-windows-x64\webapps\solr_home\my_core)。 dataDir:表示你core的数据目录,当前core的索引数据会存放在dataDir下的data\index目录下,上述所有文件夹需要你手动创建(除了data\index这里的index目录,solr会自动创建), Config、schema保持不变。
备注:
- properties不能copy过去,是在创建的时候自动生成,如果copy此文件,会报错误:as another core is already defined there
- 新建core时,name必须与在solr_home文件夹下面新建的那个my_core的文件夹名称保持一致,否则在停止tomcat后再启动时,在core_selector中无法找到之前创建的core。
9.3增量Dataimport
全增量,如下图。(选择full_import,勾选clen,否则不勾选)
9.4查询query
查询参数说明(solr参数)
在做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参数!
一、常用 q - 查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京)
fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20081001 TO 20091031],找关键字张三,并且CreateDate是在20081001到20091031范围内fl - 指定返回那些字段内容,用逗号或空格分隔多个。 name,subbranch,tel
start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
rows - 指定返回结果最多有多少条记录,配合start来实现分页。
sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。
wt - (writer type)指定输出格式,可以有 xml, json, php,python,ruby,cvsfl表示索引显示那些field( *表示所有field,如果想查询指定字段用逗号或空格隔开(如:Name,SKU,ShortDescription或Name SKU ShortDescription【注:字段是严格区分大小写的】))
q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或)
例如:name:总统府 OR tel:23xxxxxx3
例如: text:总统府 AND text:邮局
或 +text:总统府 +text:邮局
或 name:总统府 AND tel:23xxxxxx3
或 name: ( +总统府 +邮局)
df - 默认的查询字段,一般默认指定
qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。
indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
version - 查询语法的版本,建议不使用它,由服务器指定默认值。
hl 是否高亮 ,如hl=truehl.fl 高亮field ,hl.fl=Name,SKUhl.snippets :默认是1,这里设置为3个片段
hl.simple.pre 高亮前面的格式
hl.simple.post 高亮后面的格式
facet 是否启动统计
facet.field 统计field
排除查询
在要排除的词前加上 “-” (不包含”号) 号
例如: 总统府 -邮局
搜寻结果不会有包含邮局的词的结果在内
增加权重: 如要搜寻 “中华 加油站”(不包含”号) 但因为回传太多笔资料内有 “中华”(不包含”号) 或 “加油站”(不包含”号) 的结果,
所以想要把有包含 “加油站”(不包含”号)的数据往前排,可使用 “^”(不包含”号)符号在后面加上愈增加的权重数,
像是 “2″,则可以这样做:中华 加油站^2
会同时搜寻含有中华或加油站的结果,并把加油站这个词加权所以搜寻时会先判断加油站这一个词在
搜寻结果中的比重,甚至假设一笔数据内加油站出现过两次以上的就更加会有优先权.
查询时在查询词后加上 “^” (不包含”号) 再加上权重分数
例如: 总统府 AND “邮局”^2
或
总统府^2 OR 邮局
Wildcard 搜寻使用 “*” 符号; 如果输入 “中国*银” (不包含”号), 结果会有中国信托商业银行, 中国输出入银行图书阅览室, 中国商银证券
中国及银之间可夹任何长短字词.
【注:以上是比较常用的参数,当然具体的参数使用还是多看Solr官方的技术文档以及一些大神的博文日志,这里只是抛砖引玉】
二、 Solr运算符
- “:” 指定字段查指定值,如返回所有值*:*
- “?” 表示单个任意字符的通配
- “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
- “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
- 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10
- “^” 控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
- 布尔操作符AND、||
- 布尔操作符OR、&&
- 布尔操作符NOT、!、- (排除操作符不能单独与项使用构成查询) 10. “+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在 11. ( ) 用于构成子查询 12. [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710] 13. {} 不包含范围检索,如检索某时间段记录,不包含头尾 date:{200707 TO 200710} 14. / 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : /
注:①“+”和”-“表示对单个查询单元的修饰,and 、or 、 not 是对两个查询单元是否做交集或者做差集还是取反的操作的符号
比如:AB:china +AB:america ,表示的是AB:china忽略不计可有可无,必须满足第二个条件才是对的,而不是你所认为的必须满足这两个搜索条件
如果输入:AB:china AND AB:america ,解析出来的结果是两个条件同时满足,即+AB:china AND +AB:america或+AB:china +AB:america
总而言之,查询语法: 修饰符 字段名:查询关键词 AND/OR/NOT 修饰符 字段名:查询关键词
三、 Solr查询语法1.最普通的查询,比如查询姓张的人(Name:张),如果是精准性搜索相当于SQL SERVER中的LIKE搜索这需要带引号(""),比如查询含有北京的(Address:"北京")
2.多条件查询,注:如果是针对单个字段进行搜索的可以用(Name:搜索条件加运算符(OR、AND、NOT) Name:搜索条件),比如模糊查询(Name:张 OR Name:李)单个字段多条件搜索不建议这样写,一般建议是在单个字段里进行条件筛选,如( Name:张 OR 李),多个字段查询(Name:张 + Address:北京 )
3.排序,比如根据姓名升序(Name asc),降序(Name desc)
命令式数据增量
以下内容为命令式操作增量
10、命令式数据增量
至此所有DIH的配置完成,在浏览器中输入命令:
10.1全导入:
http://localhost:3333/solr/my_core/dataimport?command=full-import&commit=ture
10.2增量导入:
http://localhost:3333/solr/my_core/dataimport?command=delta-import&clean=false&commit=ture
10.3查看导入状态
http://localhost:3333/solr/my_core/dataimport?command=status
10.4、处理CLOB字段
<entity name=”meta” query=”select id,filename,content,bytes from documents” transformer=”ClobTransformer”
<field column=”ID” name=”id” />
<field column=”CONTENT” name=”CONTENT” clob=”true” />
</entity>
ClOB 字段的 column 必须大写!!
10.5、DIH内存溢出错误
在使用DIH时,容易报内存溢出错误。可以通过设置jvm大小来解决。设置方法如下:
在tomcat\bin\startup.bat 加入SET JAVA_OPTS=-Xms128m -Xmx1024m 配置 这里设置的是1024M,根据情况可以适量增大。
10.6、自动全导入和自动增量导入
此功能可以自己写程序实现,也可利用apache-solr-dataimportscheduler-1.0.jar包完成此功能。配置如下:
修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
将apache-solr-dataimportscheduler-.jar 中 dataimport.properties 取出并根据实际情况修改,然后放到 solr.home/conf (不是solr.home/core/conf) 目录下面
IK分词器
以下内容为IK分词器配置
11、solr6.2.0配置中文分词器IK Analyzer
不同于solr其他版本的IK分词器配置,从solr6以上因为JDK版本的升级等原因,IKAnalyzer2012FF_u1.jar版本已经不再适用,需要升级使用ik-analyzer-solr5-5.x.jar。
11.1下载solr6.0专用的IK Analyzer的jar包和相应的配置文件。
11.2配置文件
解压上一个步骤所得到的压缩包,将ik-analyzer-solr5-5.x.jar这个jar包放入solr项目下的WEB-INF\lib目录中去,将IKAnalyzer.cfg.xml, stopword.dic放在solr项目下的WEB-INF\classes目录中去(没有就创建classes文件夹)。
11.3修改managed-schema文件
11.4:在solr应用中测试,示例如下图:
11.5修改solrconfig.xml文件
修改E:\solr\solr_home\collection1\conf\solrconfig.xml文件配置生成的索引文件路径,示例如下:
<dataDir>${solr.data.dir:E:/solr/solr_home/data}</dataDir>
12、solr+IK实现同义词设置
12.1、在solr_home\core1\conf\synonyms.txt文件中添加同义词。
=>指一对一,以逗号分隔的是组群,也就是多对多。
备注:做ik同义词分词时,打开.txt文件添加同义词后;
需要用ue另存为 无BOM 的 UTF-8 编码,否则启动tomcat报错java.nio.charset.MalformedInputException: Input length = 1。
12.2在solr_home\core1\conf\managed-schema文件中配置同义词。
备注:,如果需要使用以逗号分隔的组群,建立多对多的关系,需要将上面的expand="true"设置为true。
13、solr+ik实现自定义分词
13.1F:\kingdom\apache-tomcat-8.0.41\webapps\solr\WEB-INF\classes目录下的IKAnalyzer.cfg.xml配置文件,添加如下配置 ext.dic;
13.2新建ext.dic文件,在里面添加如下内容(注意:ext.dic的编码必须是Encode in UTF-8 without BOM,否则自定义的词库不会被识别)
13.3重启solr,在控制台core admin里reload一下,测试验证。
14、停止词设置
停止词:lucene的停止词是无功能意义的词,比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。
扩展词库:就是不想让哪些词被分开,让他们分成一个词。
同义词:假设有一个电子商务系统,销售书籍,提供了一个搜索引擎,一天,市场部的人要求客户在搜索书籍时,同义词就是比如输入“电子”,除了展示电子相关的书籍,还需要展现“机器”相关的书籍。
以IK分词器为例子说明怎么配置。
14.1:配置停止词和扩展词库。
14.2.同义词配置。
备注:以上所有的配置都需要重新生成索引来测试。
参考
本文为原创