说明:本文档仅说明solr在单例模式下的启动和配置,不适用SolrCloud模式下的情况。
一、Solr-6安装
1. 确保服务器安装的jdk版本在1.8以上
2. 在http://lucene.apache.org/solr/ 下载solr6的.tgz包
3. 将解压后的solr6包放入linux的自定义目录下
二、Solr-6启动
1. 进入solr的bin目录下,运行solr start脚本文件
当看到“Started Solr server on port 8983(pid=xxxxx).Happy searching!”提示时,启动成功,solr端口默认为8983。如图2-1:
可用solr status查看服务器启动状态
图2-1-solr启动
2. 在浏览器地址栏访问http://x.x.x.x(服务器ip):8983/solr/即可访问到solr的可视化管理界面Solr Admin,如图2-2:
图2-2:Solr Admin界面
三、创建core
1. 在自定义路径下,创建一个solrhome(名字可自定义)用来存放solr的core(可以为多个),即索引库数据,一个core相当于一个索引库。
2. 在solrhome下创建一个core文件夹(文件夹名字可自定义),代表一个core。
3. 在solrhome下配置solr.xml文件(可从solr的examples里找到模板进行修改),配置方法如图3-1:
图3-1:solr.xml配置
<cores>下可以配置多个core,一个<core>标签代表一个core
name:用户可以为创建的core自定义一个名称,这里暂定义为document。
(注:这里的core的名字和创建的core的文件夹名字不是一回事)
instanceDir:创建的core的根目录。
4. 在创建的core文件夹下创建一个conf文件夹:放入solrconfin.xml和managed-schema两个配置文件,(可从solr的examples里找到模板进行修改),具体配置方法见第四节和第五节。
5. 在core文件夹下创建一个data文件夹,作为当前core的数据目录
6. 在core文件夹下配置core.properties文件:
Solr5以上的版本支持自动发现core,core不再需要显式明确地在solr.xml中定义,仅需要在core.properties属性文件类配置core属性即可。Solr会自动在solrhome目录下发现core.properties文件。主要配置如图3-2:
图3-2:core.properties
name:core名称,必填。(注:这里的core的名字和创建的core的文件夹名字不是一回事)
config:solrconfig.xml配置文件的文件名,默认是solrconfig.xml
dataDir:当前目录下的data路径
schema:managed-schema文件的文件名,必须放在当前core的conf目录下
7. 进入Core Admin界面(Solr Admin左侧菜单栏中Core Admin选项)单击Add Core创建一个core,如图3-3:
图3-3:Solr Admin创建core
name:core的名字(用户自定义)。
instanceDir:创建的core的根目录。
dataDir:core下的data目录
config: solrconfig.xml的文件名
schema: managed-schema文件的文件名
8. 单击 Add Core蓝色按钮创建core后,左侧菜单栏下方下拉选框中可以看到创建的core的名字,选中进入后界面如图3-4:
图3-4:core管理界面
9. core管理界面几个主要菜单简介
Analysis:分词管理,可以在该界面测试各分词器的分词效果
Documents:可执行不同solr索引命令的可视化及金额面
Files:显示当前core的配置文件
Query:结构化地查询一个core的不同元素
Schema:配置managed-schema的可视化界面
10. core的目录结构图
图3-5:core目录结构图
<luceneMatchVersion> 声明使用的lucene 的版本。
<lib> 配置solr 用到的 jar包,具体语法示例中基本都有了。
<dataDir>solrhome下core下的data 目录,可指定其它目录来存放所有索引数据。
<directoryFactory> 索引文件的类型,默认solr.NRTCachingDirectoryFactory,这个文件类型包装了 solr.StandardDirectoryFactory 和小文件内存缓存的类型,来提供 NRT(near-real-time近实时)搜索性能。。
<indexConfig> 主要索引相关配置:
l <lockType>文件锁的类型,默认 native,使用 NativeFSLockFactory 。
l <infoStream>为了调试, Lucene提供了这个参数,如果是 true的话, IndexWriter 会像设置的文件中写入 debug信息。
<jmx> 一般不需要设置具体可以查看 wiki文档http://wiki.apache.org/solr/SolrJmx
<updateHandler> 更新的Handler ,默认DirectUpdateHandler2,主要配置如下:
l <updateLog>
<strname="dir"> 配置更新日志的存放位置
l <autoCommit> 硬自动提交,可以配置 maxDocs即从上次提交后达到多少文档后会触发自动提交; maxTime时间限制; openSearcher ,如果设为false ,导致索引变化的最新提交,不需要重新打开 searcher就能看到这些变化,默认 false。
l <autoSoftCommit>软自动提交,与前面的 <autuCommit> 相似,但是它只是让这些变化能够看到,并不保证这些变化会同步到磁盘上。这种方法比硬提交要快,而且更接近实时更友好。
<query> 配置检索词相关参数以及缓存配置参数。
l <maxBooleanClauses>每个 BooleanQuery 中最大BooleanClauses 的数目,默认 1024。
l <filterCache> filterCache 存储了无序的lucenedocumentid 集合。为 IndexSearcher 使用,当一个IndexSearcher 打开时,可以被重新赋于原来的值,或者使用旧的 IndexSearcher 的值,例如使用 LRUCache时,最近被访问的 Items将被赋予 IndexSearcher 。solr 默认是 FastLRUCache 。
l <queryResultCache> 缓存查询的结果集的 docs的 id。
l <documentCache> 缓存 document对象,因为 document中的内部 id是 transient, 所以autowarmed 为0 ,不能被 autowarmed。
l <enableLazyFieldLoading> 保存的字段,如果不需要的话就懒加载,默认true。
l <queryResultWindowSize>queryResultCache 的一个参数。
l <queryResultMaxDocsCached> queryResultCache 的一个参数。
l <listener event"newSearcher"class="solr.QuerySenderListener">query 的事件监听器。
l <useColdSearcher>当一个检索请求到达时,如果现在没有注册的searcher,那么直接注册正在预热的 searcher并使用它。如果设为 false则所有请求都要 block,直到有 searcher完成预热。
l <maxWarmingSearchers>后台同步预热的 searchers数量。
<requestDispatcherhandleSelect="false"> solr接受请求后如何处理,推荐新手使用false
l <requestParsersenableRemoteStreaming="true" multipartUploadLimitInKB="2048000"formdataUploadLimitInKB="2048" /> 使系统能够接收远程流
l <httpCachingnever304="true">http cache 参数,solr 不输出任何 HTTPCaching相关的头信息。
<requestHandler> 接收请求,根据name值不同分发到不同的handler。
"/select" 检索 SearchHandler
"/query" 检索 SearchHandler
"/get" RealTimeGetHandler
"/browse" SearcherHandler
"/update" UpdateRequestHandler
"/update/json" JsonUpdateRequestHandler
"/update/csv" CSVRequestHandler
"/update/extract"ExtractingRequestHandler
"/analysis/field" FieldAnalysisRequestHandler
"/analysis/document"DocumentAnalysisRequestHandler
"/admin/" AdminHandlers
"/replication" 复制,要有主,有从
l <searchComponent> 注册searchComponent
l <queryResponseWriter> 返回数据
1. <fields>块:声明一系列的<field>字段
<field name="" type="" indexde=""stored="" required="" multiValued=""omitNorms="" termVectors="" termPositions=""termOffsets="">
name:字段名称
type:字段类型,同<types> 的fieldType
indexed:是否索引
stored:是否保存
required:是否必须
multiValuer:在同一篇文档中可以有多个值
omitNorms:true的话忽略norms
termVectors:默认false,如果是true的话,要保存字段的termvector
termPositions:保存term vector的位置信息
termOffects:保存term vector的偏移信息
default:字段的默认值
<dynamicField>动态字段,当字段是可变字段时采用这种配置
2. <types>块:声明一系列的<fieldtype>,以 Solr fieldtype类为基础,如同默认选项一样来配置自己的类型。任何 FieldType 的子类都可以作为 field type 来使用,使用时可以用完整的包名,如果field type 类在 solr 里,那可以用“solr”代替包名。提供多种不同实现的普通数据类型(integer, float等)。通用的选项有:
name:类型名称
class:对应于solr fieldtype类
sortMissingLast=true|false 如果设置为true,那么对这个字段排序的时候,包含该字段的文档就排到不包含该字段的文档前面。
sortMissingFirst=true|false 如果设置为true,那么对这个字段排序的时候,没有该字段的文档排在包含该字段的文档前面
precisionStep:默认值4,用于范围查询,数值类型在lucence中以经过编码的string形式存储。precisionStep用来分解编码后的string。该值越大,那么索引就越小,那么范围查询的性能(尤其是细粒度的范围查询)也越差。
positionIncrementGap和multiValued一起使用,设置多个值之间的虚拟空白的数量。字段有多个值时使用
l <analyzer>(必须将涉及到的类的jar包放置于webapp下)
<tokenizer>:配置各种不同的分词器实现不同的分词效果
<filter>:配置各种不同的过滤器,可以进行大小写过滤,停顿词过滤等。
3. 其他配置
<uniqueKey>唯一字段,除非这个字段标记了“required=false”,否则默认为required字段
<copyField>一个源字段一个目的字段,将源字段的内容拷贝到目的字段,可以将多个字段合并,也可以对同一个字段,不同索引方式。
<defaultSearchField>默认的搜索字段
<solrQueryParser defaultOperator="OR"/>默认的检索词间的关系
六、参考资料
1. Solr-6.0.0官方文档:http://lucene.apache.org/solr/
2. 《跟益达学Solr5之玩转post.jar》创建core部分: http://www.tuicool.com/articles/miInQbF
3. solr.xml文件解析: http://blog.csdn.net/zyb243380456/article/details/7411373
4. 《跟益达学Solr5之core.properties配置详解》:http://www.tools138.com/create/article/20150515/020005434.html
5. 《solr使用手册--部署配置》:http://wenku.baidu.com/link?url=wo39I_w6iS5ns96FwCP_BZ7T9mBATbcZEjy2oQqnYgnx-DYubxTr5NuY66UX3MyUhTTMZ7mfmQAkgbobTCGNNQ3ZBmcPId5SS4OhpH7cZA_