`
lzzy_alex
  • 浏览: 30159 次
社区版块
存档分类
最新评论

SolrJ 技术应用

    博客分类:
  • Solr
 
阅读更多

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

分享到:
评论

相关推荐

    人工智能-项目实践-搜索引擎-基于solrj开发solr主从搜索引擎服务的dubbo组件

    总结,这个项目结合了Solr搜索引擎、Solrj、Dubbo等技术,旨在构建一个稳定、高效的分布式搜索服务。通过主从复制保证数据一致性,借助Dubbo实现服务的分布式部署,使得整个系统具备高可用性和可扩展性,充分体现了...

    4.10.3 solr

    它提供了高效、可扩展的搜索和分析功能,广泛应用于企业级的信息检索系统。在版本 4.10.3 中,Solr 已经经过验证是可用的,这表明它在发布时已经具备了稳定性和兼容性,适合实际部署。 在了解 Solr 4.10.3 的具体...

    HBase视频教程下载|基于微博数据应用的HBase实战开发

    在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...

    JavaEE软件工程师简历

    熟悉Java编程,有良好的算法和编码能力,熟悉面向对象编程 ... 熟悉Springmvc,Spring,MyBatis,了解Struts2, Hibernate等开源框架 熟练使用Eclipse、SVN、Maven项目...掌握solr集群搭建及solrJ集群版的Java接口应用

    开源企业搜索引擎SOLR的 应用教程

    随着互联网的发展以及用户对于信息检索需求的增长,企业级搜索引擎成为了提升用户体验的关键技术之一。针对不同的应用场景,有多种搜索引擎解决方案可以选择。本文档主要介绍了基于Apache Solr的搜索引擎实现方式。 ...

    人工智能-项目实践-搜索引擎-一个用Solr做企业应用内的搜索引擎的SpringBoot项目

    标题中的“人工智能-项目实践-搜索引擎-一个用Solr做企业应用内的搜索引擎的SpringBoot项目”揭示了这个项目的核心内容,它是一个结合了人工智能、搜索引擎技术,并基于Solr和SpringBoot框架实现的企业级搜索解决...

    开源企业搜索引擎SOLR的应用教程

    最终,**Apache Solr**成为许多企业的首选,因为它不仅提供了强大的搜索功能,还支持高度可定制化的配置,并且作为一个成熟的开源项目,具有良好的社区支持和技术文档。 **1.2 Solr的特性** - **1.2.1 Solr使用...

    solr ssm java

    让我们深入了解一下这些技术及其相互作用。 **Solr**: Apache Solr是基于Lucene的全文搜索服务器,它提供了高效、可扩展的搜索和导航功能。Solr支持分布式搜索,能够处理大量数据,并且可以通过RESTful API或XML/...

    java工程师简历_java简历.doc

    8. 了解Solr集群搭建及SolrJ的Java接口应用。 9. 了解Redis集群搭建及Jedis的Java接口应用。 10. 了解分布式文件系统FastDFS及其Java接口应用。 【工作经历】 1. 在无锡凌志软件公司担任软件工程师,负责Java app...

    WebSolrDemo 全文检索,全文索引

    WebSolrDemo是一个示例项目,它展示了如何在Web应用中实现全文检索和全文索引功能,使用的核心技术是Apache Solr。Apache Solr是一款开源的企业级搜索平台,能够处理大量数据并提供高效的全文检索能力。 全文检索是...

    solr从入门到精通教程

    尤其对于那些想要深入理解和掌握Solr在企业级信息检索和管理中应用的技术人员,这份教程将是一个宝贵的资源。由于内容非常丰富,对Solr的每个知识点都有详细的说明和操作示例,非常适合初学者入门,以及对进阶用户...

    solr学习心得和总结笔记

    SolrJ支持索引维护和查询操作,让开发者可以更方便地在Java应用中使用Solr。 1. SolrJ维护索引:通过SolrJ客户端,可以方便地实现添加、删除和修改索引文档的Java代码。 2. SolrJ查询索引:同样,查询索引也可以...

    个人简历(谌某某)_嵌入式_java简历_程序员简历模板_计算机相关专业.docx

    * 熟悉Solr集群搭建和SolrJ接口的应用 * 熟悉Redis集群搭建和Redis集群版Java接口的应用 7. 并发解决方案: * 熟悉集群下的并发解决方案 从工作经历中,我们可以看到该开发工程师参与了多个项目,包括: 1. ...

    java3年工作经验简历_java简历.docx

    在前端技术上,他精通JavaScript、Ajax和jQuery,对solr集群搭建和solrJ的Java接口应用有经验,同时也了解redis集群的搭建和Java接口应用,对并发解决方案有实际的集群环境下实施经验。 在工作经历方面,谌纪委有多...

    solr+spring+hibernate+maven+webservice整合框架

    通过SolrJ库,我们可以方便地与Solr服务器进行交互,实现数据的导入、更新和查询。 2. **Spring**: Spring是Java应用开发中最广泛使用的轻量级框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能。在本框架...

    搜索引擎solr和elasticsearchJava开发J

    "赚钱项目"可能是指将这些搜索引擎技术应用到实际的商业项目中,比如电商网站的搜索功能、金融行业的数据分析平台、物联网设备的日志分析系统等。通过Java开发,可以将Solr和Elasticsearch无缝集成到业务流程中,...

    Springboot_solor_Redis.7z

    在SpringBoot中集成Solr,可以使用SolrJ客户端库,通过定义SolrServer bean并与SolrCloud或单节点部署进行交互。这使得应用程序能够对大量数据进行高效的全文搜索,提升用户体验。 数据库方面,MySQL是最广泛使用的...

    亿万级搜索解决方案.docx

    - **应用场景**:在电商搜索系统中,用于实现服务间的RPC调用。 2. **Zookeeper集群**: - **概述**:Zookeeper是一个分布式的协调服务框架。 - **作用**:在搜索系统中用于管理集群的状态信息、配置数据等。 3...

Global site tag (gtag.js) - Google Analytics