(一)引入相关依赖
<!--solr的java客户端-->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.4</version>
</dependency>
<!--SolrJ的相关依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
(二)增、删、改、查
1、增
/**
* 增加索引
* @throws IOException
* @throws SolrServerException
*/
@Test
public void testCreateIndex() throws IOException, SolrServerException {
String baseUrl = "http://localhost:8080/solr";
//连接solr服务器(单机版)
SolrServer solrServer = new HttpSolrServer(baseUrl);
//添加
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "4");
doc.setField("name", "潘4");
solrServer.add(doc);
//手动提交
solrServer.commit();
}
2、删
/**
* 删除
* @throws IOException
* @throws SolrServerException
*/
@Test
public void testDeleteIndex() throws IOException, SolrServerException {
String baseUrl = "http://localhost:8080/solr";
//连接solr服务器(单机版)
SolrServer solrServer = new HttpSolrServer(baseUrl);
//删除
String query = "id:1";
solrServer.deleteByQuery(query, 1000);
}
3、改
/**
* 更新
* @throws IOException
* @throws SolrServerException
*/
@Test
public void testUpdateIndex() throws IOException, SolrServerException {
String baseUrl = "http://localhost:8080/solr";
//连接solr服务器(单机版)
SolrServer solrServer = new HttpSolrServer(baseUrl);
//更新(与添加一致,只要ID相同,就是更新;ID不同,就是添加)
}
4、查
/**
* 查询
* @throws IOException
* @throws SolrServerException
*/
@Test
public void testSearchIndex() throws IOException, SolrServerException {
String baseUrl = "http://localhost:8080/solr";
//连接solr服务器(单机版)
SolrServer solrServer = new HttpSolrServer(baseUrl);
//查询 过滤 数据区间 排序 分页(开始行,每页行数) 高亮 默认域 只查询指定域
SolrQuery solrQuery = new SolrQuery();
//1、关键词(不设查询条数的话,默认返回10条)
// solrQuery.set("q", "book_name:爱");
solrQuery.setQuery("book_name:爱");
///2、过滤条件
solrQuery.setFilterQueries("book_tags:心理学");
///3、区间(主要用于数值型索引)
solrQuery.setFilterQueries("id:[1000 TO 5000]");
///4、排序
solrQuery.addSort("id", SolrQuery.ORDER.desc);
//5、分页
solrQuery.setStart(0);
solrQuery.setRows(5);
//6、设置默认域
solrQuery.set("df", "book_name");
//7、指定查询域(显示的结果,未指定的不显示)
// solrQuery.set("fl", "id,book_name"); 和下面同等效果
solrQuery.setFields("id", "book_name");
//8、高亮
//8.1打开高亮开关
solrQuery.setHighlight(true);
//8.2指定高亮域
solrQuery.addHighlightField("book_name");
//8.3指定高亮域前缀
solrQuery.setHighlightSimplePre("<span style='color:red'>");
//8.3指定高亮域后缀
solrQuery.setHighlightSimplePost("</span>");
//执行查询
QueryResponse queryResponse = solrServer.query(solrQuery);
//文档结果集
SolrDocumentList documentList = queryResponse.getResults();
/**
* 获取高亮文档结果集(solr服务器再返回查询结果集时,普通查询和高亮查询是两个结果集,要分别遍历显示)
* 基本结构:
* 最外层Map: K id V Map
* 内层Map:K 域名 V List
* List: list.get(0)
*/
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//总条数
long numFound = documentList.getNumFound();
System.out.println(numFound);
for (SolrDocument solrDocument : documentList){
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("book_name"));
System.out.println(solrDocument.get("book_author"));
System.out.println(solrDocument.get("book_tags"));
System.out.println("------------------------------------------------");
/**
* 获取高亮文档结果集
* 基本结构:
* 最外层Map: K id V Map
* 内层Map:K 域名 V List
* List: list.get(0)
*/
Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
List<String> list = map.get("book_name");
System.out.println(list.get(0));
}
}