废话不多说!直接开撸!
所需jar包:
<dependencies>
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
下面的增删改查操作之前都执行的该部分代码:
@Before
public void inint() {
solrServer = new HttpSolrServer("http://192.168.80.3:8080/solr");
}
增加:
/**
* 测试增加
* @throws Exception
*/
@Test
public void tetsAdd() throws Exception{
SolrInputDocument document = new SolrInputDocument();
document.setField("id","6");
document.setField("title", "我是solrj客户端的测试");
solrServer.add(document);
solrServer.commit();
}
更新:
/**
* 更新就是删除相同的唯一标识符后再次添加需要更新的内容即可!
* @throws Exception
*/
@Test
public void TestUpdate() throws Exception{
SolrInputDocument document = new SolrInputDocument();
document.setField("id","6");
document.setField("title", "我是测试更新的!");
solrServer.add(document);
solrServer.commit();
}
删除:
/**
* 测试删除
* @throws Exception
*/
@Test
public void TestDelete() throws Exception{
UpdateResponse deleteById = solrServer.deleteById("1");
solrServer.commit();
System.out.println(deleteById);
}
查询:
/**
* 测试查询
*/
@Test
public void TestQuery() throws Exception{
//得到查询对象
SolrQuery params = new SolrQuery();
//设置查询条件
params.set("q", "title:第二次");
//设置过滤条件
params.set("fq","id:2");
// params.set("fq","price:[* to 10]");
//设置排序
params.setSort("id",ORDER.asc);
//设置每次查询多少条
params.setStart(0);
params.setRows(10);
//设置显示要求的属性结果(结果只有title属性的值)
// params.set("fl","title");
//设置默认查询的属性
params.set("df","id");
/**
* 设置高亮:
* 1)打开高亮
* 2)设置需要高亮的属性
* 3)设置高亮属性的前缀(html的格式)
* 4)设置高亮属性的后缀(html的格式)
*/
params.setHighlight(true);
params.addHighlightField("title");
params.setHighlightSimplePre("<h1 style='color=red'>");
params.setHighlightSimplePost("</h1>");
/**
* 执行查询(就是solr页面查询结果中的数据)
* 有responseHeader和response
* result ->>>>> {responseHeader={status=0,QTime=1,params={wt=javabin,version=2}},response={numFound=0,start=0,docs=[]}}
*/
QueryResponse result = solrServer.query(params);
//得到查询结果(response)->>>>> {numFound=0,start=0,docs=[]}
//就是solr页面查询结果中的数据(其中相关属性这里都可以得到)
SolrDocumentList documents = result.getResults();
System.out.println(documents.getNumFound());
System.out.println(documents.getStart());
//得到高亮的集合(高亮的集合是单独的和网页的一样)
Map<String, Map<String, List<String>>> highlighting = result.getHighlighting();
//第一个map K是id value是map
//第二个map K是域 list是值
//遍历得到的每一个查询结果的document
for (SolrDocument solrDocument : documents) {
Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
List<String> list = map.get("title");
for (String str : list) {
System.out.println("我是高亮的: "+str);
}
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("title"));
}
}
因为最重要的也是最有用的就是查询:上面的代码结果对应solr的客户端查询就是如下图: