1.简单介绍
Solr是一个全文检索的服务,对外提供webservice服务,webservice使用的http协议。
Solr作为一个服务端,同时也提供很多的不同编程语言的客户端,供程序员开发使用。
2.添加依赖
4.0.0
com.mine
solr
war
1.0-SNAPSHOT
solr Maven Webapp
http://maven.apache.org
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.7
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
utf-8
UTF-8
8888
org.springframework
spring-beans
4.3.3.RELEASE
org.springframework
spring-context
4.3.3.RELEASE
org.springframework
spring-context-support
4.3.3.RELEASE
org.springframework
spring-jdbc
4.3.3.RELEASE
org.springframework
spring-orm
4.3.3.RELEASE
org.springframework
spring-test
4.3.3.RELEASE
org.springframework
spring-aspects
4.3.3.RELEASE
org.springframework
spring-expression
4.3.3.RELEASE
org.springframework
spring-webmvc
4.3.3.RELEASE
javax.servlet
jstl
1.2
javax.servlet.jsp
jsp-api
2.1
provided
javax.servlet
servlet-api
2.5
provided
org.apache.solr
solr-solrj
4.10.4
org.slf4j
jcl-over-slf4j
1.7.21
org.slf4j
jul-to-slf4j
1.7.21
org.slf4j
slf4j-api
1.7.21
org.slf4j
slf4j-log4j12
1.7.21
junit
junit
4.9
log4j
log4j
1.2.14
commons-lang
commons-lang
2.6
3.简单测试
/**
* Copyright (C), 2015-2017, XXX有限公司
* Description: 索引维护
* History:
*
4.
数据导入处理器
作为程序员,我们不可能像上面那样一条一条更改添加,很麻烦,数据导入处理器替我们提供了解决方案
solr提供dataimport-Handler数据导入处理器,工作流程:
(1) solr通过dataimport-Handler查询关系数据库中的数据
(2) 对查询到的数据创建索引
上边的过程是自动化完成的。
可以通过此dataimport-Handler,批量将关系数据库中的数据创建索引到solr索引库中。
<1>加载jar包
将solr\dist\ solr-dataimporthandler-4.10.3.jar拷贝至solr\contrib\dataimporthandler
配置solrconfig.xml加载jar包:
<2>加载MySQL数据库驱动包
将mysql数据库驱动的jar拷贝至solr\contrib\databaseDriver下
配置solrconfig.xml加载jar包:
<3>编辑data-config.xml文件,存放在SolrCore的conf目录
(column数据库列名,name为solr中定义的field的域名)
data-config.xml
<5>导入数据
完成,可以进行搜索,当然,我们也可以在schema.xml文件中进行一下配置,达到组合搜索的结果
<6>搜索
可以根据这张图片编写代码
//搜索索引
@Test
public void searchIndex() throws SolrServerException {
//创建solr服务对象,通过此服务向solr服务发起请求
SolrServer solrServer = new HttpSolrServer(solrUrl);
//创建查询对象
SolrQuery solrQuery = new SolrQuery();
//查询关键字("q"不能省去,必须写)
solrQuery.set("q","product_keywords:挂钩");
//添加过滤,过滤一个不满足,想过滤多个可以使用add
solrQuery.set("fq","product_price:[1 TO 3]");
//排序
solrQuery.addSort("product_price", SolrQuery.ORDER.desc);
//如果一个排序不够,可以再加一个
//solrQuery.addSort("", SolrQuery.ORDER.asc);
//分页(知道当前页码和每页显示个数求出开始下标)
int curPage=1;
int rows=15;
//计算开始记录下标
int start=rows*(curPage-1);
//向query中设置分页参数
solrQuery.setStart(start);
solrQuery.setRows(rows);
//指定显示的field
//solrQuery.addField("product_name");
//指定默认搜索的域
solrQuery.set("df","product_keywords");
//想设置高亮的话,可以设置高亮
solrQuery.setHighlight(true);
//设置高亮参数(想设置多个的话,不多说)
solrQuery.addHighlightField("product_name");
//设置高亮前缀和后缀
solrQuery.setHighlightSimplePre("");
solrQuery.setHighlightSimplePost("");
//指定查询
QueryResponse response = solrServer.query(solrQuery);
//从响应中得到高亮map
Map>> highlighting = response.getHighlighting();
//从响应中得到结果
SolrDocumentList docs = response.getResults();
//查看结果
for (SolrDocument doc : docs) {
System.out.print(doc.get("id")+"\t");
System.out.println(doc.get("product_name"));
//获取高亮信息
if (highlighting != null) {
Map> map = highlighting.get(doc.get("id"));
if (list != null) {
List list = map.get("product_name");
if (map != null) {
System.out.println(list.get(0));
}
}
}
}
}