solr搭建和测试 windows版
准备:solr启动包(windows)
下载链接: https://download.csdn.net/download/qq_41833449/12786525.
流程:
1、solr压缩包
2、将mysql连接jar,放到solr解压之后的server\solr-webapp\webapp\WEB-INF\lib
3、server\solr 新建一个core(myCore)
4、将同目录下的 configsets\sample_techproducts_configs 下的conf考到mycore里面
5、到bin目录下启动solr (solr start /solr start -p 8800 )
6、页面上添加一个core Admin (logCore)
7、到logCore/conf编辑managed-schema
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
替换成
<field name="id" type="string" indexed="true" stored="true" required="false" multiValued="false" />
<uniqueKey>id</uniqueKey>
替换成
<uniqueKey>logId</uniqueKey>
//indexed=是否索引,主键必须索引
<field name="logId" type="string" indexed="true" stored="true"/>
<field name="content" type="string" indexed="true" stored="true"/>
<field name="createTime" type="string" indexed="false" stored="true"/>
8、到myCore/conf新建solr-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/demand?serverTimezone=CTT" user="root" password="123456" />
<document name="messages">
<entity name="message" transformer="ClobTransformer" query="select log_id , content , create_time from l_logs " >
<field column="log_id" name="logId"/>
<field column="content" name="content"/>
<field column="create_time" name="createTime"/>
</entity>
</document>
</dataConfig>
9、到logCore/conf修改solrconfig.xml
在/select上添加
solr-data-config.xml
10、将\solr-8.6.1\dist下面的jar 拷贝到server\solr-webapp\webapp\WEB-INF\lib
11、页面是导入数据,然后查询 查看日志如果出现内存溢出 , 重启添加参数 solr start -m 2g(指定内存大小2g)
12、还有问题直接去看日志
简单测试:
content全部用uuid存值,对比200W条数据:
1、mysql总条数
2、mysql模糊查询,需要2s左右时间
3、solr总条数(直接导入的mysql数据)
4、solr的效率0.43s
整合springboot:
1、maven
<!--集成solr搜索引擎客户端-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
2、配置文件
##solr服务器地址和core的名称
spring.data.solr.host=http://localhost:8800/solr/logCore
3、代码
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("test")
public class Test {
@Autowired
private SolrClient solrClient;
@RequestMapping("test")
public List<ILog> test(String content ,int pageNo ,int pageSize ){
SolrQuery query = new SolrQuery();
query.setQuery("content:*" + content + "*" + " and content:*" + content + "*");
query.setStart((pageNo - 1) * pageSize);
query.setRows(pageSize);
query.setSort("logId" , SolrQuery.ORDER.desc);
QueryResponse response = null;
SolrDocumentList documentList = null;
List<ILog> list = new ArrayList<>();
try {
response = solrClient.query(query);
documentList = response.getResults();
if (!documentList.isEmpty()) {
for (SolrDocument document:documentList) {
ILog iLog= new ILog();
String logId = (String) document.get("logId");
iLog.setLogId(Long.valueOf(logId));
iLog.setContent((String) document.get("content"));
list.add(iLog);
}
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@RequestMapping("delete")
public void delete(String id ){
try {
solrClient.deleteById(id);
solrClient.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping("add")
public void add(String logId , String content ,String createTime){
SolrInputDocument document = new SolrInputDocument();
document.addField("logId", logId);
document.addField("content", content);
document.addField("createTime", createTime);
try {
solrClient.add(document);
solrClient.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
solr命令:
普通启动:solr start ;
指定端口启动:solr start -p 8800;
指定solr内存大小:solr start -m 2g;
停止:solr stop -all