简介: solr5.0是一个独立的应用程序,不再依赖其他Web服务器就能提供Web服务(这是和4.x版本最大的差异,内置jetty)。
下载:http://lucene.apache.org/solr/
-
安装solr
下载压缩包解压即可!
-
目录说明
-
dist 各种jar包
-
contrib 各种jar包
-
bin 常用命令脚本
-
server web服务器
-
solr 未来创建的core会在该目录下
-
configsets solr配置集,新建的core可以从这里拷贝配置
-
xx-core
-
conf 配置文件
-
solrconfig.xml solr的配置信息
-
schema.xml 分词器配置信息
-
-
data 索引等数据
-
-
-
logs 日志文件
-
webapps web程序部署位置
-
-
example
-
example-DIH 数据导入工具
-
-
licenses 各种授权协议
-
docs api文档
-
-
启动solr
solr提供了启动脚本
- bin/solr start
- 前台运行 bin/solr start -f
- 指定端口号 bin/solr start -p 8984(默认端口号8983)
- 查看solr状态 bin/solr status
- 结束solr bin/solr stop -p 8984
后台管理地址 http://localhost:8984/solr
logging:显示日志
Core Admin: core就是搜索示例,放置索引。
java properties:查看java配置信息
Thread dump:查看线程信息
-
创建一个搜索实例
{solr安装路径}/server/solr/新建一个文件夹命名为test
拷贝{solr安装路径}/server/solr/configsets/sample_techproducts_configs到test目录下
目录结构如下:
在后台采用如下配置:
-
配置smartcn分词期
-
第一步:导入smartcn的jar包
在{solr安装路径}/server/solr/test/conf/solrconfig.xml加入如下代码
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex=".*smartcn.*\.jar"></lib>
-
第二步:配置分词器
1.solr5在{solr安装路径}/server/solr/test/conf/schema.xml加入如下代码
2.solr6- <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
- <analyzer>
- <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
- <filter class="solr.LowerCaseFilterFactory"/>
- <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
- </analyzer>
- </fieldType>
在{solr安装路径}/server/solr/test/conf/managed-schema加入如下代码
- <fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
- <analyzer>
- <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
- <filter class="solr.LowerCaseFilterFactory"/>
- <filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt" />
- </analyzer>
- </fieldType>
-
第三步:检查是否正确配置
如果可以搜索到text_cn即表示配置成功,最好用一段文字测试下分词结果。
-
-
配置数据导入handler(用于数据导入,生成索引)
-
第一步:导入相关jar包(solr6不需要这一步)
在{solr安装路径}/server/solr/test/conf/solrconfig.xml加入如下代码
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
-
第二步:配置handler(solr6不需要这一步)
在{solr安装路径}/server/solr/test/conf/solrconfig.xml加入如下代码
- <requestHandler name="/dataimport" class="solr.DataImportHandler">
- <lst name="defaults">
- <str name="config">db-data-config.xml</str>
- </lst>
- </requestHandler>
-
第三步:配置数据源,源数据与索引的隐射关系
在{solr安装路径}/server/solr/test/conf/下新建db-data-config.xml,配置如下:
- <dataConfig>
- <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
- <document name="articles">
- <entity name="cms_article" query="select id,title,content,create_time from cms_article">
- <field column="id" name="id" />
- <field column="title" name="title" />
- <field column="content" name="content" />
- <field column="create_time" name="create_time" />
- </entity>
- </document>
- </dataConfig>
-
第四步:验证配置是否成功
在后台core admin中reload当前搜索实例的配置
then在搜索实例的dataimport出现下图情形即为成功
-
-
导入数据
-
第一步:导入mysql的jar包 下载地址:见参考资料5
将jar放置到{solr安装路径}/dist目录下,
在{solr安装路径}/server/solr/test/conf/solrconfig.xml加入如下代码
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql.*\.jar" />
-
第二步:验证配置(配置见第六点)
如果显示indexing completed. Added/Updated: 1847 documents. Deleted 0 documents
documents的个数大于0说明我们成功导入x条数据到solr中
-
-
设置field的索引方式
-
查询
-
更新索引
-
删除索引
-
优化
-
定时完整数据重新导入
- crontab -e
- curl -d "command=full-import&clean=true&commit=true&optimize=true&wt=json&indent=true&verbose=false&debug=false" "http://ip:port/solr/{core名称}/dataimport"
14.增量导入数据配置
修改db-data-config.xml添加deltaQuery、deltaImportQuery、pk三个属性
1.pk设置主键字段名称,该字段必须在managed-schema配置过<uniqueKey>字段名</uniqueKey>
2.deltaQuery该属性用于查询主键字段值
3.deltaImportQuery该属性用于查询需要被索引的所有字段的sql
- <dataConfig>
- <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
- <document name="articles">
- <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
- <field column="id" name="id" />
- <field column="title" name="title" />
- <field column="content" name="content" />
- <field column="create_time" name="create_time" />
- </entity>
- </document>
- </dataConfig>
15.配置定时数据更新
16.搜索词建议
https://cwiki.apache.org/confluence/display/solr/Suggester
更新中~~~
错误信息:
1.配置好的solr没有任何数据,启动时报错:SolrException: Invalid Number: MA147LL/A
这不是你的错,你可能是把solr schema.xml的id设置成了int类型,设置成int类型没什么错,但是solr启动是会扫描conf目录下的elevate.xml文件,这个文件中定义的id值是MA147LL/A
所以就会出现异常SolrException: Invalid Number: MA147LL/A
解决问题的方法是修改elevate.xml文件,将其中的id值设置为数字,就可以了。
- <dataConfig>
- <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1"/>
- <document name="articles">
- <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
- <field column="id" name="id" />
- <field column="title" name="title" />
- <field column="content" name="content" />
- <field column="create_time" name="create_time" />
- </entity>
- </document>
- </dataConfig>
2.全量导入数据报:
Caused by: java.sql.SQLException: Illegal value for setFetchSize().
在db-data-config.xml的dataSource标签添加batchSize属性并赋值-1即可,修改后的内容
- <dataConfig>
- <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/appfamecms" user="1" password="1" batchSize="-1"/>
- <document name="articles">
- <entity name="cms_article" query="select id,title,content,create_time from cms_article" pk="id" deltaQuery="select id from cms_article where id>${dataimporter.delta.id}" deltaImportQuery="select id,title,content,create_time from cms_article where id={$dataimporter.delta.id}">
- <field column="id" name="id" />
- <field column="title" name="title" />
- <field column="content" name="content" />
- <field column="create_time" name="create_time" />
- </entity>
- </document>
- </dataConfig>
参考资料:
1.官网参考文档 http://apache.fayea.com/lucene/solr/ref-guide/apache-solr-ref-guide-5.0.pdf
2.官网wiki之DataImportHandler https://wiki.apache.org/solr/DataImportHandler
3.solr教程,值得刚接触搜索开发人员一看 http://blog.csdn.net/awj3584/article/details/16963525
4.Ajita博客 http://ajita.iteye.com/blog/1995140
5.CSDN MYSQL JAR包下载:http://download.csdn.net/download/nsrainbow/8196897
6.Apache Solr查询语法 http://blog.javachen.com/2014/03/03/solr-query-syntax/
7.solr 的edismax与dismax比较与分析 http://blog.csdn.net/duck_genuine/article/details/8060026
8.solr搜索打分规制排序http://lavafree.iteye.com/blog/1685766
9.Lucene Scoring 评分机制 http://blog.chenlb.com/2009/08/lucene-scoring-architecture.html
10.解决Solr重建索引时没有索引部分表的数据问题 http://www.jianshu.com/p/fd857c02effc
11.solrconfig.xml 应用解析调优 https://segmentfault.com/a/1190000002582878