SolrJ简述
Solr 允许客户端使用Http方式与服务端交互,同时也支持编程语言通信。SolrJ就是基于Java语言的交互实现,通过SolrJ编程接口,可以完成所有Solr支持的文档服务。
文章目标
通过对SolrJ编程接口学习,完成项目基本检索任务,包括索引,查询,分页,高亮,Facet。以下内容是基于 solr5.3.0版本的,请读者选择性阅读。
安装SolrJ
在使用SolrJ之前,需要确保相关包已经添加到类路径下,包安装有以下两种方式:
手动安装:
需要将 solr-5.3.0\dist 目录下的solr-solrj-5.3.0.jar(编译时)与 solrj-lib 文件夹中的包(运行时)添加到项目类路径下。
Maven安装:
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>5.3.0</version> </dependency>
SolrClient
SolrClient是SolrJ与服务端交互入口,它是一个抽象类,常用的实现类有两种:HttpSolrClient(standalone模式), CloudSolrClient(cloud模式)。使用形式如下:
SolrClient solr = new HttpSolrClient("http://my-solr-server:8983/solr/core1"); SolrClient solr = new CloudSolrClient("zkServerA:2181,zkServerB:2181,zkServerC:2181/solr");
客户端实例创建后,就可以向solr服务端提出交互请求了(如query, add, commit)。
索引文档
SolrJ文档索引工作也非常简单,可以通过以下两种方式实现:
SolrInputDocument:
首先创建与服务端的HTTP连接通道,即客户端,然后创建SolrInputDocument文档对象,再将文档提交给Solr。代码如下:
SolrClient solr = new HttpSolrClient("http://172.16.10.39:8983/solr/core1"); SolrInputDocument document = new SolrInputDocument(); document.addField("id", "552199"); document.addField("name", "Gouda cheese wheel"); document.addField("category", "1"); UpdateResponse response = solr.add(document); solr.commit();
注解:
注解的方式相对简洁,首先需要在Bean中使用Field注解:
public class MyBean { @Field public String id; @Field public String name; @Field public String category; }
然后再将Bean实例提交给solr:
SolrClient solr = new HttpSolrClient("http://172.16.10.39:8983/solr/core1"); solr.addBean(myBean); solr.commit();
需要注意的是,前面用到的三个域(id, name, category), 需要在 schema.xml文件中定义才能使用:
<field name="id" type="string" indexed="true" stored="true" required="true" /> <field name="name" type="text_general" indexed="true" stored="true"/> <field name="category" type=" string " indexed="true" stored="true"/>
此外,如果总是对大批量数据做索引工作的话,Solr建议使用ConcurrentUpdateSolrClient代替HttpSolrClient。
文档查询
文档查询工作是通过SolrQuery对象完成的,以下代码是搜索常用到的功能,包括关键字查询,分页,高亮,Facet:
SolrClient solr = new HttpSolrClient("http://172.16.10.39:8983/solr/core1"); SolrQuery q = new SolrQuery(); //在域name中搜索包含keyword的文档 String queryString = “name:keyword”; q.set("q", queryString); // 分页 q.set("start", 0); q.set("rows", 10); // Facet q.set("facet", true); q.set("facet.query",queryString); q.set("facet.field", "category"); //对category分类统计 q.set("facet.mincount", 1); //筛选命中文档数大于0的统计结果 // 高亮 q.set("hl", true); q.set("hl.fl", "name"); //需要高亮的域 q.set("hl.simple.pre", "<em>"); //高亮标签 q.set("hl.simple.post", "</em>"); // 提交查询 QueryResponse resp = solr.query(q); // 收集结果 long numFound = resp.getResults().getNumFound(); //命中文档数目 List<MyBean> list = resp.getBeans(MyBean.class); //命中文档结果(注解方式才能使用) List<FacetField> facetFields = resp.getFacetFields(); //Faceting 结果 Map<String, Map<String, List<String>>> highlight = resp.getHighlighting(); //高亮结果
从上面的代码可以看到,查询器语法与Solr Admin UI 中的参数一致,读者也可以使用SolrJ封装的方法调用。返回结果的结构也与Admin UI返回结果相似。以下是解析Facet, Highlight结果的示例代码,建议读者配合Admin UI返回结果查看:
// Faceting 结果处理 for (FacetField field : facetFields) { Log.debug("Field: " + field.getName() + " ,Count: " + field.getValueCount() + " : "); StringBuffer buf = new StringBuffer(); for (Count c : field.getValues()) { buf.append(c.getName() + ":" + c.getCount() + "\t"); } Log.debug(buf.toString()); } //Highlighting 结果处理 for (String docId : highlight.keySet()) { Map<String, List<String>> doc = highlight.get(docId); for (String fieldName : doc.keySet()) { List<String> fields = doc.get(fieldName); for (String val : fields) { Log.debug(docId + " -> " + fieldName + " -> " + val); } } }
小结
SolrJ是面向Solr服务端的编程库,通过SolrJ客户端对象SolrClient完成与Solr交互。介绍了SolrJ安装,索引文档(SolrInputDocument, 注解)及文档查询功能(查询,分页,高亮,Faceting)。
参阅文档
https://cwiki.apache.org/confluence/display/solr/Using+SolrJ
apache-solr-ref-guide-5.3.pdf
相关推荐
总结,这个项目结合了Solr搜索引擎、Solrj、Dubbo等技术,旨在构建一个稳定、高效的分布式搜索服务。通过主从复制保证数据一致性,借助Dubbo实现服务的分布式部署,使得整个系统具备高可用性和可扩展性,充分体现了...
它提供了高效、可扩展的搜索和分析功能,广泛应用于企业级的信息检索系统。在版本 4.10.3 中,Solr 已经经过验证是可用的,这表明它在发布时已经具备了稳定性和兼容性,适合实际部署。 在了解 Solr 4.10.3 的具体...
在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...
熟悉Java编程,有良好的算法和编码能力,熟悉面向对象编程 ... 熟悉Springmvc,Spring,MyBatis,了解Struts2, Hibernate等开源框架 熟练使用Eclipse、SVN、Maven项目...掌握solr集群搭建及solrJ集群版的Java接口应用
随着互联网的发展以及用户对于信息检索需求的增长,企业级搜索引擎成为了提升用户体验的关键技术之一。针对不同的应用场景,有多种搜索引擎解决方案可以选择。本文档主要介绍了基于Apache Solr的搜索引擎实现方式。 ...
标题中的“人工智能-项目实践-搜索引擎-一个用Solr做企业应用内的搜索引擎的SpringBoot项目”揭示了这个项目的核心内容,它是一个结合了人工智能、搜索引擎技术,并基于Solr和SpringBoot框架实现的企业级搜索解决...
最终,**Apache Solr**成为许多企业的首选,因为它不仅提供了强大的搜索功能,还支持高度可定制化的配置,并且作为一个成熟的开源项目,具有良好的社区支持和技术文档。 **1.2 Solr的特性** - **1.2.1 Solr使用...
让我们深入了解一下这些技术及其相互作用。 **Solr**: Apache Solr是基于Lucene的全文搜索服务器,它提供了高效、可扩展的搜索和导航功能。Solr支持分布式搜索,能够处理大量数据,并且可以通过RESTful API或XML/...
8. 了解Solr集群搭建及SolrJ的Java接口应用。 9. 了解Redis集群搭建及Jedis的Java接口应用。 10. 了解分布式文件系统FastDFS及其Java接口应用。 【工作经历】 1. 在无锡凌志软件公司担任软件工程师,负责Java app...
WebSolrDemo是一个示例项目,它展示了如何在Web应用中实现全文检索和全文索引功能,使用的核心技术是Apache Solr。Apache Solr是一款开源的企业级搜索平台,能够处理大量数据并提供高效的全文检索能力。 全文检索是...
尤其对于那些想要深入理解和掌握Solr在企业级信息检索和管理中应用的技术人员,这份教程将是一个宝贵的资源。由于内容非常丰富,对Solr的每个知识点都有详细的说明和操作示例,非常适合初学者入门,以及对进阶用户...
SolrJ支持索引维护和查询操作,让开发者可以更方便地在Java应用中使用Solr。 1. SolrJ维护索引:通过SolrJ客户端,可以方便地实现添加、删除和修改索引文档的Java代码。 2. SolrJ查询索引:同样,查询索引也可以...
* 熟悉Solr集群搭建和SolrJ接口的应用 * 熟悉Redis集群搭建和Redis集群版Java接口的应用 7. 并发解决方案: * 熟悉集群下的并发解决方案 从工作经历中,我们可以看到该开发工程师参与了多个项目,包括: 1. ...
在前端技术上,他精通JavaScript、Ajax和jQuery,对solr集群搭建和solrJ的Java接口应用有经验,同时也了解redis集群的搭建和Java接口应用,对并发解决方案有实际的集群环境下实施经验。 在工作经历方面,谌纪委有多...
通过SolrJ库,我们可以方便地与Solr服务器进行交互,实现数据的导入、更新和查询。 2. **Spring**: Spring是Java应用开发中最广泛使用的轻量级框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能。在本框架...
"赚钱项目"可能是指将这些搜索引擎技术应用到实际的商业项目中,比如电商网站的搜索功能、金融行业的数据分析平台、物联网设备的日志分析系统等。通过Java开发,可以将Solr和Elasticsearch无缝集成到业务流程中,...
在SpringBoot中集成Solr,可以使用SolrJ客户端库,通过定义SolrServer bean并与SolrCloud或单节点部署进行交互。这使得应用程序能够对大量数据进行高效的全文搜索,提升用户体验。 数据库方面,MySQL是最广泛使用的...
- **应用场景**:在电商搜索系统中,用于实现服务间的RPC调用。 2. **Zookeeper集群**: - **概述**:Zookeeper是一个分布式的协调服务框架。 - **作用**:在搜索系统中用于管理集群的状态信息、配置数据等。 3...