一、配置中文分词器
该功能是将数据库中的数据通过
sql语句的方式导入到solr索引库中1.1 添加
jar包在
D:\solr\solr-7.7.3\dist下solr-dataimporthandler-7.7.3.jar和solr-dataimporthandler-extras-7.7.3.jar导入到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib中将
mysql-connector-java-x.x.xx.jar导入D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib中mysql-connector-java-x.x.xx.jar下载地址:https://downloads.mysql.com/archives/c-j/1.2 配置中文分词器
找到自带的中文分词器
D:\solr\solr-7.7.3\contrib\analysis-extras\lucene-libs,将其中的jar包全部复制到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib中进入刚才创建的
core所在目录D:\solr\solr_home\core_demo\conf,修改文件managed-schema,将如下内容复制到文件的最下方保存退出- 其中,
name="solr_cnAnalyzer"可以自定义为自己想要的内容<!-- ChineseAnalyzer --><fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100"><analyzer type="index"><tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/></analyzer><analyzer type="query"><tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/></analyzer></fieldType>
- 其中,
配置好后,重新启动
D:\solr\apache-tomcat-8.5.76-solr-8081\bin目录下的startup.bat,刷新主页面,即可选择刚才配置的分词器

1. 测试分词效果
1.3 配置IKAnalyzer分词器
- 将下载好的
IKAnalyzer的jar包拷贝到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib下 进入
D:\solr\solr_home\core_demo\conf,修改文件managed-schema,将如下内容复制到文件的最下方保存退出<!-- IKAnalyzer --><fieldType name="text_ik" class="solr.TextField"><analyzer type="index"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>
配置好后,重新启动
D:\solr\apache-tomcat-8.5.76-solr-8081\bin目录下的startup.bat,刷新主页面,即可选择刚才配置的分词器
二、managed-schema文件详解
managed-schema文件中主要配置solrCore数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先定义后使用2.1
Field详解<field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>name:指定field的名称(自定义)- 域名不能重复
type:指定field的类型indexed:是否索引- 是:将分好的词进行索引,加快检索速度
- 否:对该
field不存在检索操作
stored:是否存储- 是:将
field中的内容存储到文档域中,目的是为了搜索页面展示取值 - 否:不存储该
field中的内容,搜索页面中无法获取该field的值
- 是:将
required:是否必须multiValued:是否多值,如查询数据需要关联多个字段数据时,一个field中存储多个值的信息,则需要将multiValued设置为true2.2
dynamicField动态域<dynamicField name="*_i" type="pint" indexed="true" stored="true"/>name="*_i",定义其type=int,则在使用此字段时,任何以_i为结果的字段都被认为符合此定义2.3
uniqueKey唯一域<uniqueKey>id</uniqueKey>- 其中的
id表示在field标签中已经定义好的域名,且该域设置required=true -
2.4
copyField复制域 <copyField source="cat" dest="text"/>- 将多个域的关键词复制到同一个域或者多个域时,可以放到一个域中
source:源field的名称dest:目标field的名称- 目标
field的multiValued一定为true
- 目标
- 实例
```xml
<a name="V4e8a"></a>## 2.5 `fieldType`域类型1. `<fieldType name="pdate" class="solr.DatePointField" docValues="true"/>`1. `solr`中`fieldType`域类型与`javaBean`中的类型对应关系1. `string -> String`1. `boolean -> Boolean`1. `pint -> Integer`1. `pdouble -> Double`1. `plong -> Long`1. `pfloat -> Float`1. `pdate -> Date`<a name="FcDVc"></a>## 2.6 `Analyser`分词器```xml<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" /><!-- in this example, we will only use synonyms at query time<filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/><filter class="solr.FlattenGraphFilterFactory"/>--><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /><filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>
name:指定域类型的名称class:指定该域类型对应的solr类型analyzer:指定分词器tokenizer:指定分词器类型type:index、query,用于指定索引和搜索时的分词器-
三、
Dataimport数据库数据导入3.1 修改
solrconfig.xml文件 进入
D:\solr\solr_home\core_demo\conf找到solrconfig.xml文件查询是否存在
dataimport的requestHandler,若不存在则手动添加在
solrconfig.xml文件同级目录下创建data-config.xml文件data-config.xml文件的作用:- 数据库连接的相关信息
SQL以及查询结果映射到对应的域data-config.xml内容- 注意!!
entity中必须包含一个主键id<dataConfig><dataSource type="JdbcDataSource"driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/databesename(替换为自己的数据库链接)"user="username"password="password"/><document><entity name="tableName"query="SELECT columnName_1,...,columnName_n from tableName"><field column="columnName_1" name="id"/><field column="columnName_1" name="name_1"/>...<field column="columnName_n" name="name_n"/></entity></document></dataConfig>
data-config.xml详解dataSource中添加MySQL连接配置document中定义数据库查询设置entity为数据表的实体定义name数据表名query查询语句,可以实现多表查询
field:field中的column对应于数据表query查询的columnName_i,name类似于自己定义的别名,且name的name_i必须在managed-schema文件中定义
managed-schema文件中定义data-config.xml中的field内name对应的name_i<!-- gyy_mall 表中各个属性的定义--><field name="itemid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/><field name="catid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/><field name="areaid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/><field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/><field name="price" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/><field name="keyword" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/><field name="company" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/><field name="address" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/><field name="pid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/>
- 此处的定义需要根据自己的需求定义
type="text_ik"表示定义分词器的名称
- 重启
tomcat服务

- 点击
Execute,将数据从数据库中读出 query中查询数据

