solr简介
solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是一个高性能,高可用环境全文搜索引擎
solr安装
核(core):是用于存储json格式的数据,等价于mysql中数据库的概念
文档:一个json对象就是一个文档 相同属性的json数组集合就是一个表
docker里面安装
下载solr
docker pull solr:5.5.5
安装solr
docker run --name my_solr -id --net host -t solr:5.5.5
默认开起8983端口
检查一下有没有8983端口
netstat -aon | grep 8983
创建core
docker exec -it --user=solr my_solr bin/solr create_core -c mycore
创建的内容为:
Copying configuration to new core instance directory:
/opt/solr/server/solr/mycore
Creating new core 'mycore' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore
{
"responseHeader":{
"status":0,
"QTime":2591},
"core":"mycore"}
打印在页面如下↓
solr中文分词器配置
生成ik支持5.5.5的ikjar包
jar拷贝到 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
修改文件 managed-schema
定义分词器数据类型
<fieldType name="text_ik" class="solr.TextField" >
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
定义动态字段
<dynamicField name="*_ik" type="text_ik" indexed="true" stored="true"/>
如下:
吧mysql里面的数据迁移到solr中
进入solr拷贝支持导入的jar
cp /opt/solr/dist/solr-dataimporthandler-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cp /opt/solr/dist/solr-dataimporthandler-extras-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
下载一个mysql的jar文件 cp到solr中
docker cp ./mysql-connector-java-5.1.24.jar my_solr:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib
进入mycore/conf目录 新建连接数据的四要素,在solrconfig.xml同一目录下 添加 data-config.xml(配置连接的数据库以及查询的sql语句
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.3:3306/test" user="root" password="123456" batchSize="-1" />
<document>
<entity name="book" pk="newid" dataSource="source1"
query="select * from mynew" >
<field column="newid" name=""/>
<field column="newtitle" name="title_ik"/>
</entity>
</document>
</dataConfig>
修改solrconfig.xml 指定data-c.xml文件
docker cp my_solr:/opt/solr/server/solr/mycore/conf/solrconfig.xml .
代码实现
solr依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
配置文件
设置solr的主机信息 (application.yml)
spring:
data:
solr:
host: http://192.168.119.133:8983/solr
server:
port: 8888
main方法
/**
* 同时提供 SolrTemlate直接操作底层的solrj相关api
* 在配置类 实例化
* @param client
* @return
*/
@SpringBootApplication
public class SolrMain {
@Bean
public SolrTemplate solrTemplate(SolrClient client) {
return new SolrTemplate(client);
}
public static void main(String[] args){
SpringApplication.run(SolrMain.class,args);
}
}
controller层
@RestController
public class SolrCon {
@Autowired
private SolrTemplate st;
@GetMapping("/queryEmps")
public List<emp> queryEmp(String keyword){
SimpleQuery simpleQuery=new SimpleQuery("ename_ik:"+keyword);
Page <emp> query = st.query(simpleQuery, emp.class);
return query.getContent();
}
}
添加实体类
@SolrDocument(solrCoreName = "mycore")
public class emp {
private String id;
@Field("ename_ik")
private String ename;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
function query() {
$.ajax({
url:'queryEmps',
dataType:'json',
data:'keyword='+$("#mykeyword").val(),
type:'get',
success:function (r) {
$("#myemp").text(JSON.stringify(r))
}
})
}
</script>
</head>
<body>
新闻:<input id="mykeyword" type="text" name="keyword"><button onclick="query()">搜索</button>
<div id="myemp">
</div>
</body>
</html>