1 当新建core后,选择Dataimport选项是如下状态:此博文就是配置数据导入的笔记
2 把solr-8.3.0/dist/目录下的 solr-dataimporthandler-extras-4.7.0.jar和solr-dataimporthandler-4.7.0.jar,mysql-connector-java-8.0.18.jar复制到tomcat下的\webapps\solr\WEB-INF\lib中。
百度网盘:链接: https://pan.baidu.com/s/1QZBlcGzwzcFCE2NEQeVSnw 提取码: sxrv
ls|grep solr-dataimport|xargs -i cp /root/solr-8.3.0/dist/{} /usr/local/tomcat8.5/webapps/solr/WEB-INF/lib/
cp mysql-connector-java-8.0.18.jar /usr/local/tomcat8.5/webapps/solr/WEB-INF/lib/
3 添加如下内容到/usr/local/solrhome/test_core/solrconfig.xml:
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
4 新建配置文件data-config.xml,这里主要用来连接数据库并创建solr索引,内容如下
<dataConfig>
<!-- 这是mysql的配置,学会jdbc的都应该看得懂 -->
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:8080/manage"
user="test"
password="test"/>
<document>
<!-- name属性,就代表着一个文档,可以随便命名 -->
<!-- query是一条sql,代表在数据库查找出来的数据 -->
<entity name="crm_follow" query="select * from crm_follow">
<!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
<field column="topic_id" name="topicId"/>
<field column="user_id" name="userId"/>
<field column="contacts_id" name="ContactsId"/>
<field column="type" name="type"/>
<field column="status" name="status"/>
<field column="next_flow_time" name="nextFlowTime"/>
<field column="ecDate" name="ecDate"/>
<field column="is_assist" name="isAssist"/>
<field column="content" name="content"/>
<field column="remarks" name="remarks"/>
<field column="create_time" name="createTime"/>
</entity>
</document>
</dataConfig>
5 很重要:在managed-schema文件中增加field标签(推荐),也可以在管理后台增加,效果一样,二选一即可
<field name="news_content" type="text_ik" indexed="true" stored="false"/>
<field name="news_origin" type="string" indexed="true" stored="true"/>
<field name="news_title" type="text_ik" indexed="true" stored="true"/>
6 执行
可能会出现的问题:
a 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
请修改数据库url中的&符号为&,比如:
jdbc:mysql://192.168.10.150:3306/lizhimin?useUnicode=true&characterEncoding=utf-8
b Data Config problem: 与元素类型 "entity" 相关联的 "query" 属性值不能包含 '<'
请注意query的sql语句中不能有"<"符号,如果有都会报错
解决办法:solr SB,修改语句,如把where id<100改为where id between 0 and 100之类的语句
c 一定要注意下图中的数字是否正确,如果不正确请查看日志,有很大可能是filed没有建导致document生成失败
d 如果多个copyField的dest指向同一个field的name,者该field的multiValued="true"一定不能少,切记切记!!!
<field name="news_keywords" type="text_ik" multiValued="true" indexed="true" stored="false"/>
<copyField source="news_content" dest="news_keywords"/>
<copyField source="news_origin" dest="news_keywords"/>
<copyField source="news_title" dest="news_keywords"/>
e 启用ReloadDebug-Mode后出现如下错误:
Use of the dataConfig param (DIH debug mode) requires the system property enable.dih.dataConfigParam because it's a security risk.
原因请参照:【威胁通告】Apache Solr远程代码执行漏洞 (CVE-2019-0193)预警通告 http://blog.nsfocus.net/cve-2019-0193/
把enable.dih.dataConfigParam=true加入到tomcat的启动参数中即可:
编辑tomcat/bin/catalina.sh,在第二行加入:JAVA_OPTS="$JAVA_OPTS -Denable.dih.dataConfigParam=true"
然后重启tomcat,使用 ps aux|grep tomcat查看一下有没有生效,如果没有,请参考https://blog.csdn.net/qq_28497823/article/details/103313423中第5步的操作。
7查询