Lucene之SolrJ的相关操作(十一)

来源:互联网 发布:暗影格斗2mac破解版 编辑:程序博客网 时间:2024/04/29 07:30

一、介绍

1.1 什么是SolrJ?
solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:

1.2 依赖的jar

二、添加文档

1.1 实现步骤

第一步:创建一个java工程

第二步:导入jar包。包括solrJ的jar包。还需要


第三步:和Solr服务器建立连接。HttpSolrServer对象建立连接。

第四步:创建一个SolrInputDocument对象,然后添加域。

第五步:将SolrInputDocument添加到索引库。

第六步:提交。

@Testpublic void testIndexCreate() throws Exception{SolrServer solrServer = new HttpSolrServer("http://localhost:8181/solr/collection1");//创建solr文档SolrInputDocument document = new SolrInputDocument();//域要先定义,后使用,也就是说,你需要在solr的服务中先定义这些域document.addField("id", "npf002");document.addField("product_name", "npftest");document.addField("product_price", "12.5");solrServer.add(document);solrServer.commit();}
运行上面的代码,成功后,你可以访问http://localhost:8181/solr进行查询验证。


三、修改文档

在solrJ中修改没有对应的update方法,只有add方法,只需要添加一条新的文档,和被修改的文档id一致,就可以修改了。本质上就是先删除后添加。

四、删除文档

1.1 根据id删除
@Testpublic void deleteDocumentByid() throws Exception {//创建连接SolrServer solrServer = new HttpSolrServer("http://localhost:8181/solr/collection1");//根据id删除文档solrServer.deleteById("npf002");//提交修改solrServer.commit();}
运行上面的代码,成功后,你可以访问http://localhost:8181/solr进行查询验证。


1.2 根据查询删除

查询语法完全支持Lucene的查询语法。

@Testpublic void deleteDocumentByQuery() throws Exception {//创建连接SolrServer solrServer = new HttpSolrServer("http://localhost:8181/solr/collection1");//根据查询条件删除文档solrServer.deleteByQuery("id:npf001");//提交修改solrServer.commit();}

五、查询文档

1.1 简单查询
@Testpublic void queryIndex() throws Exception {//创建连接SolrServer solrServer = new HttpSolrServer("http://localhost:8181/solr/collection1");//创建一个query对象SolrQuery query = new SolrQuery();//设置查询条件query.setQuery("*:*");//执行查询QueryResponse queryResponse = solrServer.query(query);//取查询结果SolrDocumentList solrDocumentList = queryResponse.getResults();//共查询到商品数量System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());//遍历查询的结果for (SolrDocument solrDocument : solrDocumentList) {System.out.println(solrDocument.get("id"));System.out.println(solrDocument.get("product_name"));System.out.println(solrDocument.get("product_price"));System.out.println(solrDocument.get("product_catalog_name"));System.out.println(solrDocument.get("product_picture"));}}

1.1 复杂查询

其中包含查询、过滤、分页、排序、高亮显示等处理。

@Testpublic void queryIndex2() throws Exception {//创建连接SolrServer solrServer = new HttpSolrServer("http://localhost:8181/solr/collection1");//创建一个query对象SolrQuery query = new SolrQuery();//设置查询条件query.setQuery("钻石");//过滤条件query.setFilterQueries("product_catalog_name:幽默杂货");//排序条件query.setSort("product_price", ORDER.asc);//分页处理query.setStart(0);query.setRows(10);//结果中域的列表query.setFields("id","product_name","product_price","product_catalog_name","product_picture");//设置默认搜索域query.set("df", "product_keywords");//高亮显示query.setHighlight(true);//高亮显示的域query.addHighlightField("product_name");//高亮显示的前缀query.setHighlightSimplePre("<em>");//高亮显示的后缀query.setHighlightSimplePost("</em>");//执行查询QueryResponse queryResponse = solrServer.query(query);//取查询结果SolrDocumentList solrDocumentList = queryResponse.getResults();//共查询到商品数量System.out.println("共查询到商品数量:" + solrDocumentList.getNumFound());//遍历查询的结果for (SolrDocument solrDocument : solrDocumentList) {System.out.println(solrDocument.get("id"));//取高亮显示String productName = "";Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");//判断是否有高亮内容if (null != list) {productName = list.get(0);} else {productName = (String) solrDocument.get("product_name");}System.out.println(productName);System.out.println(solrDocument.get("product_price"));System.out.println(solrDocument.get("product_catalog_name"));System.out.println(solrDocument.get("product_picture"));}}




源码已经托管到github上面:https://github.com/lucene-in-action/lucene-solr

0 0