spring boot + solr + mysql
先从官网下载solr solr官网链接
solr目录图:
在/server/solr中创建一个文件夹new_core
进入/server/solr/configsets/_default目录将conf文件夹复制到 刚创建的文件夹 new_core
然后进入new_core下的conf下的solrconfig.xml
找到以下代码
<!-- SearchHandler
http://wiki.apache.org/solr/SearchHandler
For processing Search Queries, the primary Request Handler
provided with Solr is "SearchHandler" It delegates to a sequent
of SearchComponents (see below) and supports distributed
queries across multiple shards
-->
在此注释代码上加入以下代码:
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str> //存放连接MySQL的配置
</lst>
</requestHandler>
创建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/table"
//url中直接使用&会报错需要将&改为:&
user="root"
password="root" />
<document>
<entity pk="id" name="test" query="select * from test">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
配置完成后在同级文件夹找到 managed-schema 编辑
加入连接数据库的字段 大概在113行
<!-- id不用自己加 -->
<field name="name" type="string" indexed="true" stored="true"/>
加完之后可以启动solr 输入地址访问 访问solr
在左侧 Core Selector 中 选择刚刚添加的 new_core
点击Dataimpport导入即可完成如下图
最后查询的时候点击 Query 就可以进行查询了
这步成功之后在 pom.xml 中 添加依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
</dependency>
然后在配置文件中添加配置
properties:
spring.data.solr.host=http://localhost:8983/solr/new_core
spring.application.name=solr
yml:
spring:
data:
solr:
host: http://localhost:8983/solr/new_core
application:
name: solr
最后是controller的代码块
@Autowired
private SolrClient client;
@PostMapping("/queryAllSolr")
public Map<String, Object> queryAllSolr(String value) throws IOException, SolrServerException {
Map<String, Object> mp = new HashMap<String, Object>();
try {
ModifiableSolrParams params =new ModifiableSolrParams();
if(value == null || value.equals(null)) {
params.add("q","id:* or dictionaryName:*");
}else {
params.add("q","id:*"+value+"* or dictionaryName:*"+value+"*");
}
params.add("start","0");
params.add("rows","100");
QueryResponse query = client.query(params);
mp.put("list", query.getResults());
}catch (Exception e){
e.printStackTrace();
}
return mp;
}