下载solr并创建一个new core:Articles
使用DataImportHandler导入数据并添加索引
1.配置D:\solr-6.6.0\server\solr\articles\conf\solrconfig.xml
在文件最后添加
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
2.在同目录下创建文件data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://XXXX:3306/XXXX?useUnicode=true&serverTimezone=UTC&useSSL=true&characterEncoding=UTF-8" user="root" password="XXXXX"/>
<document name="sys_user">
<entity name="sys_user" pk="id" query="SELECT id,organization_id, username, password,salt,role_ids from sys_user">
<field column="id" name="id"/>
<field column="organization_id" name="organization_id"/>
<field column="username" name="username"/>
<field column="password" name="password"/>
<field column="salt" name="salt"/>
<field column="role_ids" name="role_ids"/>
</entity>
</document>
</dataConfig>
其中dataSource是数据库数据源,entity是一张表对应的实体,pk是主键,query是查询语句
Field对应一个字段,column是数据库里的字段名,后面的name对应值solr的field的名字。
3.修改同目录下的managed-schema文件,这里是solr对胡句酷里的数据进行索引的模式
添加索引字段—每个field的name要和data-config.xml中entity的field的name一致,一一对应
<field name="id" type="long" indexed="true" required="true" multiValued="false"/>
<field name="organization_id" type="long" indexed="true" stored="true"/>
<field name="username" type="string" indexed="true" stored="false" />
<field name="password" type="string" indexed="true" stored="false" />
<field name="salt" type="string" indexed="true" stored="false"/>
<field name="role_ids" type="string" indexed="true" stored="false" />
注释掉原本文件里自带的重复field,否则会报错,例如:
<!-- <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>-->
4.将mysql-connector-java-xxx-bin.jar和solr-dataimporthandler-xxx.jar(xxx版本号)复制到D:\solr-6.6.0\server\solr-webapp\webapp\WEB-INF\lib,其中solr-dataimporthandler-xxx.jar在D:\solr-6.6.0\dist目录下。
5.cmd下进入solr安装目录的bin目录下。solr restart -p8983重启solr服务,如果配置成功可以进入Articles中,点击Dataimport,选择full-import(全量导入),点击execute即可。
Query测试:在q中输入userName:test1进行检索就可以看到结果。
同时,我们可以通过代码的形式来实现
保存或更新solr的数据:
/**
* @Autuor:xy.Gao
* @Description:保存或者更新solr数据
* @Date: 2018/7/3 15:01
*/
public static <T> boolean saveSolrResource(T solrEntity) {
DocumentObjectBinder binder = new DocumentObjectBinder();
SolrInputDocument doc = binder.toSolrInputDocument(solrEntity);
try {
client.add(doc);
client.commit();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
删除solr的数据
/**
* @Autuor:xy.Gao
* @Description:删除solr数据
* @Date: 2018/7/3 15:04
*/
public static boolean removeSolrData(String id) {
try {
client.deleteById(id);
client.commit();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
查询solr数据:
/**
* @Autuor:xy.Gao
* @Description:查询数据
* @Date: 2018/7/3 15:07
*/
public static QueryResponse query(String keyWords) throws IOException, SolrServerException {
SolrQuery query = new SolrQuery();
query.setQuery(keyWords);
QueryResponse rsp = client.query(query);
return rsp;
}
查询数据主函数
public static void main(String[] args) {
try {
QueryResponse response = SolrUtil.query("admin");
SolrDocumentList beans = response.getResults();
SolrDocument sysUser=beans.get(0);
System.out.println(sysUser.getFirstValue("username"));
} catch (IOException e) {
e.printStackTrace();
} catch (SolrServerException e) {
e.printStackTrace();
}
}
参考文档: