SolrJ操作Solr很简单,一看就懂,我就不用多说
引入依赖
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.4.0</version>
</dependency>
测试solrJ的添加功能,注意Solr5之后创建HttpSolrClient使用的是Builder模式,创建时还可以设置延时时间
final String solrUrl = "http://localhost:8983/solr/lhc_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrInputDocument document = new SolrInputDocument();
// 注意:id的域不能少
document.addField("id", "c0002");
document.addField("title_ik", "使用solrJ添加的文档");
document.addField("content_ik", "solrj文档的内容");
document.addField("product_name", "solrJ商品名称");
solrServer.add(document);
solrServer.commit();
测试Solr的删除功能,根据ID删除
final String solrUrl = "http://localhost:8983/solr/lhc_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
solrServer.deleteById("c0001");
//提交
solrServer.commit();
测试SolrJ的简单查询
final String solrUrl = "http://localhost:8983/solr/lhc_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrQuery query = new SolrQuery();
query.set("q", "id:c0001");
// 调用server的查询方法,查询索引库
QueryResponse response = solrServer.query(query);
// 查询结果
SolrDocumentList results = response.getResults();
// 查询结果总数
long cnt = results.getNumFound();
System.out.println("查询结果总数:" + cnt);
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("title_ik"));
System.out.println(solrDocument.get("content_ik"));
System.out.println(solrDocument.get("product_name"));
}
我们在浏览器中看到的搜索关键字的字体都有样式,这也不难,下面举例演示
final String solrUrl = "http://localhost:8983/solr/lhc_core";
HttpSolrClient solrServer = new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrQuery query = new SolrQuery();
query.setQuery("solrJ");
// 设置过滤条件
query.setFilterQueries("product_name:solrJ商品名称");
// 设置排序
query.setSort("id",SolrQuery.ORDER.desc);
// 设置分页信息
query.setStart(0);
query.setRows(10);
// 设置显得的域的列表
query.setFields("id", "title_ik", "content_ik","product_name");
// 设置默认搜索域
query.set("df", "product_name");
// 设置高亮
query.setHighlight(true);
query.addHighlightField("product_name");
query.setHighlightSimplePre("<em>");
query.setHighlightSimplePost("</em>");
// 调用server的查询方法,查询索引库
QueryResponse response = solrServer.query(query);
// 查询结果
SolrDocumentList results = response.getResults();
// 查询结果总数
long cnt = results.getNumFound();
System.out.println("查询结果总数:" + cnt);
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.get("id"));
//Highlighting 再通过id查询出数据,再从数据中获取属性,但默认返回的是一个list,那就取第一个
System.out.println( response.getHighlighting().get(solrDocument.get("id")).get("product_name").get(0));
System.out.println(solrDocument.get("title_ik"));
System.out.println(solrDocument.get("content_ik"));
}