参考文献
Solr配置完分词器后Analysis分词有效果,查询时分词无效果的解决
集成环境
- windows10
- jdk8
- solr8.3.1
- ik-analyzer-8.3.0
工具资源下载
启动solr
.\solr start
停止solr
.\solr stop -all
重启solr
.\solr restart -port 8983
集成IK分词器
-
将下好的IK分词器jar 复制到
\solr-8.3.1\server\solr-webapp\webapp\WEB-INF\lib下
-
配置managed-schema 打开
solr-8.3.1\server\solr\需要配置的core名字\conf
<!-- ik分词器 --> <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" luceneMatchVersion="8.3.1"/> <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>
配置数据库
-
打开
solr-8.3.1\dist
文件夹,将里面的solr-dataimporthandler-x.x.x.jar
和solr-dataimporthandler-extras-x.x.x.jar
以及数据库连接驱动mysql-connector-java.jar
复制到solr-8.3.1\server\solr-webapp\webapp\WEB-INF\lib
里面 -
在
solr-8.3.1\server\solr
里面新建文件夹(文件夹的名字就是后面core的名字) -
拷贝
solr-8.3.1\server\solr\configsets\_default
文件夹下中的conf
文件夹到上面新建的文件夹中(solr-8.3.1\server\solr\configsets\sample_techproducts_configs
中其他文件夹中的conf
文件夹也可以) -
打开
solr-8.3.1\server\solr\新建的文件夹\conf\solrconfig.xml
-
找到下面的配置
<requestHandler name="/select" class="solr.SearchHandler">
-
在它上面加上以下配置
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <!-- 这里是数据库配置文件的路径 --> <str name="config">data-config.xml</str> </lst> </requestHandler>
-
-
在
solr-8.3.1\server\solr\新建的文件夹\conf
中新建文件data-config.xml
,和上面添加配置中的名字统一<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/gov_policy?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true" user="root" password="root" /> <document> <entity name="repo_policy" query="select * from repo_policy" deltaQuery="select * from repo_policy"> <!-- column:数据库表字段名; name:name对应之后managed-schema文件配置的name --> <field column="r_title" name="r_title" /> <field column="id" name="id" /> <entity name="repo_policy_content" query="select content from repo_policy_content where policy_id = '${repo_policy.id}'" deltaQuery="select * from repo_policy_content"> <field column="content" name="r_content"/> </entity> </entity> </document> </dataConfig>
- query是获取全部数据的SQL
- deltaImportQuery是获取增量数据时使用的SQL
- deltaQuery是获取pk的SQL
- parentDeltaQuery是获取父Entity的pk的SQL
-
打开
solr-8.3.1\server\solr\新建的文件夹\conf\managed-schema
并配置与上面data-config.xml
相应的域<field name="r_title" type="text_ik" uninvertible="true" indexed="true" stored="true"/> <field name="r_content" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
测试IK和数据库集成
-
启动solr,进入后台
http://127.0.0.1:8983/solr
-
点击Core Admin,新建solr核心 corename和instanceDir的名称与我们新建的文件夹名称相同,然后点击Add Core进创建成功了!
-
左侧的Core Selector中找到我们新建的文件夹名称打开
-
测试数据库配置
- 点击Dataimport,其中在Entity中就可以找到我们在配置文件中添加的数据库名称了,选择数据库,点击Execute
- 如果找不到,就说明
data-config.xml
的配置有误
- 如果找不到,就说明
- 点击左侧Query,什么都不选,直接点击ExecuteQuery就可以看到数据库中的数据了
- 点击Dataimport,其中在Entity中就可以找到我们在配置文件中添加的数据库名称了,选择数据库,点击Execute
-
测试IK分词器
-
点击Analysis,在Field Value (Index)输入需要分词的语句
-
**Analyse Fieldname / FieldType **下拉框中选择上面配置的域 r_title
-
点击右边的Analyse Values就可以看到结果了
-
错误总结
- 分词成功,Query查询却查询不了
- 原因:老数据(在集成IK之前的数据)不会刷新
- 解决方法: Solr配置完分词器后Analysis分词有效果,查询时分词无效果的解决
- 注意:删除data时,需要关闭solr服务
网友评论