1. 管理界面功能介绍
1.1 Dashboard
仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
1.2 Logging
Solr运行日志信息
1.3 Cloud
Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单,该部分功能在第二个项目,即电商项目会演示。
1.4 Core Admin
Solr Core的管理界面。在这里可以添加SolrCore实例(有bug,不推荐使用浏览器界面添加SolrCore)。
1.5 java properties
Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。
1.6 Tread Dump
显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
1.7 Core selector
选择一个SolrCore进行详细操作,如下:
1.7.1 Analysis
通过此界面可以测试索引分析器和搜索分析器的执行情况
1.7.2 dataimport
可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。
默认没有配置,需要手工配置。
1.7.3 Document
通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。
通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:
- overwrite=”true” : solr在做索引的时候,如果文档已经存在,就用xml中的文档进行替换
- commitWithin=”1000” : solr 在做索引的时候,每隔1000(1秒)毫秒,做一次文档提交。为了方便测试也可以在Document中立即提交,后添加“”
1.7.4 Query
通过/select执行搜索索引,必须指定“q”查询条件方可搜索。
2. solr基本使用
2.1. schema.xml
schema.xml文件在SolrCore的conf目录下,在此配置文件中定义了Filed域以及域的类型等一些配置。在solr中域必须先定义后使用。
2.2 field域
- Name:域的名称
- Type:域的类型
- Indexed:是否索引
- Stored:是否存储
- Required:是否必须
- multiValued:是否是多值,存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图)
2.3 dynamicField(动态域)
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
Name:动态域的名称,是一个表达式,*匹配任意字符,只要域的名称和表达式的规则能够匹配就可以使用。
例如:搜索时查询条件[product_s:钻石]就可以匹配这个动态域,可以直接使用,不用单独再定义一个product_s域。
2.4 uniqueKey
<uniqueKey>id</uniqueKey>
相当于主键,每个文档中必须有一个id域。
2.5 copyField(复制域)
<copyField source="cat" dest="text"/>
可以将多个Field复制到一个Field中,以便进行统一的检索。当创建索引时,solr服务器会自动的将源域的内容复制到目标域中。
- source:源域
- dest:目标域,搜索时,指定目标域为默认搜索域,可以提高查询效率。
定义目标域:
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
目标域必须要使用:multiValued=”true”
2.6 fieldType(域类型)和配置分词器
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
- name:域类型的名称
- class:指定域类型的solr类型。
- analyzer:指定分词器。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。
- type:index和query。Index 是创建索引,query是查询索引。
- tokenizer:指定分词器
- filter:指定过滤器
3.配置中文分析器
使用IKAnalyzer中文分析器,下载地址:
https://github.com/EugenePig/ik-analyzer-solr5
下载后的jar包
第一步:把3个jar包添加到solr/WEB-INF/lib目录下。
第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的solr/WEB-INF/classes目录下。
复制IK分词器配置文件、自定义词典、停用词词典,粘贴到Tomcat的solr的/WEB-INF/classes目录下
第三步:在schema.xml中添加一个自定义的fieldType,使用IK中文分析器。
<!--IKAnalyzer-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
</analyzer>
</fieldType>
第四步:在schema.xml中添加field,指定field的type属性为text_ik
<!--IKAnalyzer Field-->
<field name="title" type="text_ik" indexed="true" stored="true" />
第五步:重启tomcat