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"));}}
其中包含查询、过滤、分页、排序、高亮显示等处理。
@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
- Lucene之SolrJ的相关操作(十一)
- Lucene 的相关操作问答
- SolrJ的基本操作
- SolrJ的基本操作
- lucene Filed(域)的相关操作
- lucene的基本操作-索引相关
- lucene的基本操作-搜索相关
- solrj 对solr 的操作
- solrJ的简单查询操作
- 内核中与驱动相关的内存操作之十一(IO内存)
- 用solrj操作solr之HttpSolrServer
- 利用solrj操作solr的API
- solrJ对索引的删除操作
- SolrJ是操作Solr的JAVA客户端
- 利用solrj操作solr的API
- Solr java客户端solrJ的CRUD操作
- Solr-6.5.1之Solrj的使用
- 使用solrj操作solr
- MYSQL数据库基础知识及操作
- 欧几里德算法
- java java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 5 to TIMESTAMP.
- java 二进制和十六进制的互转
- python2和python3的区别
- Lucene之SolrJ的相关操作(十一)
- 【Java】匿名内部类
- [ATF]ARMv8 arm trust firmware信任的固件----安全相关
- 一个奇葩的上传乱码问题。当上传路径汉字个数为奇数会时,最后一个字符乱码
- linux中的进程控制
- 1005. Spell It Right (20)
- 搭建配置ELK stack分布式版环境
- 《深入理解Java虚拟机——JVM高级特性与最佳实践》学习笔记——晚期(运行期)优化
- jdk与jre的区别