Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http Get 操作提出查找请求,并得到 XML 格式的返回结果。这里主要讲解下通过 http Get 请求这种方式。首先,我们就必须通过 HTTP 请求类似 http://localhost:8989/solr/select?q=tags:t5 AND t7&fl=auction_id&start=0&rows=4&sort=auction_id desc,auction_point asc 的链接,对服务器进行访问。将最终结果以类似流的方式传回客户端。而具体形式是以 xml 的形式,类似下图:
Solrj 粉墨登场:
在 Solr 的连接请求,返回结果这一方面, Apache 已经为我们提供了 Solrj 这个工具,我们只需要简单的导入相关包,使用其简单的 API 就可以轻松对 solr 进行操作了。
首先我们导入相关的包,推荐大家使用 Maven ,在 pom.xml 的具体配置如下 :
Java代码
<dependency>
<artifactId>solr-solrj</artifactId>
<groupId>org.apache.solr</groupId>
<version>1.4.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
包搞定了,开始Solrj !
建立与Solr服务的连接
Java代码
String url = "http://10.13.17.38:8983/solr";
CommonsHttpSolrServer server = new CommonsHttpSolrServer(url);
server.setSoTimeout(3000); // socket read timeout
server.setConnectionTimeout(1000);
server.setDefaultMaxConnectionsPerHost(1000);
server.setMaxTotalConnections(10);
server.setFollowRedirects(false); // defaults to false
server.setAllowCompression(true);
server.setMaxRetries(1);
搜索条件的设置
Java代码
SolrQuery query = new SolrQuery();
query.setQuery("tags:t5 AND t7");
query.addField("auction_id");
query.setStart(0);
query.setRows(4);
query.addSortField("auction_id", SolrQuery.ORDER.desc);
query.addSortField("auction_point", SolrQuery.ORDER.asc);
核心就是SolrQuery这个类,我们可以通过直接的setter方法,将我们需要搜索的字段,条件,升降序等等设置其中。 如:
Field:为查询的字段;
Query:是稀疏列Tags内两列取“&”的操作;
Start和Rows:类似sql语法limit;
SortField:为排序字段,升降序。
……
这个的设置,完全等同于http请求http://localhost:8989/solr/select?q=tags:t5 AND t7&fl=auction_id&start=0&rows=4&sort=auction_id desc,auction_point asc 这个链接。
结果集获取
结果集的获取Solrj提供两种方式,两种都是通过对象的方式直接获取结果,都不需要编写xml的解析。
第一种方式:使用自带的SolrDocumentList类
Java代码
QueryResponse qrsp = solrServer.query(query);
SolrDocumentList docs = qrsp.getResults();
QueryResponse这个对象,看名字也可以猜测出来,是对Response的一次封装。而qrsp.getResults()获得对象正是Solrj帮我们做的最关键的操作。最终我们获得的对象SolrDocumentList,非常类似我们在jdbc里的ResultSet,我们得到我们想要的结果,只需一个简单的迭代就可以了。
Java代码
QueryResponse qrsp = solrServer.query(query);
SolrDocumentList docs = qrsp.getResults();
QueryResponse这个对象,看名字也可以猜测出来,是对Response的一次封装。而qrsp.getResults()获得对象正是Solrj帮我们做的最关键的操作。最终我们获得的对象SolrDocumentList,非常类似我们在jdbc里的ResultSet,我们得到我们想要的结果,只需一个简单的迭代就可以了。
Java代码
SolrDocumentList docs = s.queryDoc();
Iterator it = docs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
此时,我们可以观察到,在控制台内打印出来的结果是:
Java代码
[doumement:1]
[doumement:2]
[doumement:3]
[doumement:4]
第二种方式:Solrj提供的注解的方式,注入pojo
首先,我们要定义一个pojo类
Java代码
import org.apache.solr.client.solrj.beans.Field;
public class Item {
@Field
String id;
@Field("tags")
String[] tag;
@Field
List<String> features;
}
@Field("score")
public void setScore(String[] c){
this.categories = c;
}
这个pojo类中的属性,就是我们查询结果的字段,值得注意的是,每个属性名称必须和字段名称一模一样。之后我们将所有的属性极其setter方法都写上 solrj提供的@Field注解,其他的和一个普通pojo类没有任何区别。通过注解的方式将结果数据有针对性注入pojo对象对应的属性当中。这块的原理很简单,如果有人有兴趣,我再写一篇关于注解方式注入pojo类属性值的文章。贴上一个demo给大家拍砖。言归正传,
调用:
Java代码
QueryResponse qrsp = solrServer.query(query);
List<Item> productIds = qrsp.getBeans(Item.class);
调用QueryResponse的API,getBeans(),直接获得我们定义的Item对象List。这没什么好说的,太方便了!
优劣对比:
请求方面:
Without Solrj :如果采用http直接访问的方法,我们必然会用到httpclient请求Solr服务器。其中所有的搜索条件都必须通过拼接一个负责冗长的url,例如:q=tags:t5 AND t7&fl=auction_id&start=0&rows=4&sort=auction_id desc&…&...&… ,通过GET的方式,请求服务器。
With Solrj :面对对象的思想,所有搜索条件均以setter属性的方式设置到其封装的对象当中。但是,实际上还是通过拼接url的方式,走http请求的方式再请求Solr服务器。
Result: 本质完全相同,有了Solrj,开发会省很多事,将很多开发中的体力活交给Solrj。但是直接拼接url的方式肯定比对象的方式灵活很多。因为其中不复杂,有兴趣的同学,可以给Solrj加个方法,直接在Solrj最终生成的url上加上任何字符串。
获取结果方面:
Without Solrj :结果的返回形式是xml文件,每条记录都会以document节点的形式记录。如果要获得Object对象,我们一般会用Dom4j或者xStream等技术对结果的xml进行解析。
With Solrj :两种方式,均只有几行代码,直接获得结果。无需解析xml。优点显而易见!
Result: 没啥好说,Solrj顶!
说白了:
Solrj仅仅是一个Solr的客户端,简化大家没必要的开发量。原理很简单,实现不复杂,属于专门为Solr造的一个轮子。
相关推荐
Solrj是Apache Solr的一个Java客户端库,用于与Solr服务器进行交互。它提供了丰富的API,使得开发人员可以方便地执行索引、查询、配置和管理Solr实例。Solrj简化了Solr的集成工作,例如在Java应用中添加或更新文档,...
Solrj是Java客户端库,用于与Solr服务器进行交互,简化了Solr的API调用,使开发者能够方便地进行索引构建、查询和管理操作。 其次,我们要搭建主从复制的Solr集群,这是为了提高服务的可用性和数据的一致性。主节点...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
Solr学习笔记(三)——Solr客户端开发实例 在本文中,我们将深入探讨Solr客户端的开发,以便更好地理解如何在实际项目中利用Solr的强大功能。Solr是一款开源的全文搜索引擎,提供了高效的搜索和索引功能。通过Solr...
在“solr-example”这个压缩包中,可能包含了一个简单的Java示例项目,展示了如何使用SolrJ,这是官方提供的Java客户端库。通过SolrJ,你可以创建SolrClient对象,与Solr服务器建立连接,然后进行索引文档的添加、...
SolrJ是Apache Solr项目的Java客户端库,它为与Solr服务器进行交互提供了便利的API。这个压缩包包含了两个版本的SolrJ库:solr-solrj-4.10.3.jar和solr-solrj-5.0.0.jar。这两个版本的差异主要在于对Solr服务器的...
Solr-Solrj 5.0.0 是一个用于与Apache Solr进行交互的Java客户端库。在本文中,我们将深入探讨Solr-Solrj的使用、功能及其与自建Solr服务的集成,特别是涉及到中文分词的场景。 Apache Solr是一款流行的开源全文...
SolrJ是Apache Solr官方提供的Java客户端库,它使得在Java应用程序中与Solr搜索引擎进行交互变得简单。这个压缩包文件包含了SolrJ运行所必需的一些关键库,包括JUnit测试框架、Commons IO和Commons Logging。接下来...
Lucidworks Spark / Solr集成该项目包括用于从Solr作为Spark DataFrame / RDD读取数据以及使用SolrJ将对象从Spark索引到Solr的工具。 索引编制例子索引和查询Twitter数据索引和查询纽约市黄色出租车CSV数据配置和...
Solr-Solrj是Apache Lucene项目下的一个子项目,专门为Apache Solr搜索引擎提供Java客户端库。Solr是一款强大的全文检索服务器,而Solrj则是与之交互的Java API,使得开发人员能够轻松地在Java应用程序中集成Solr的...
SolrJ是Solr的Java客户端库,用于与Solr服务器进行交互,包括创建、更新、删除索引和执行查询。在DEMO中,你会看到如何使用SolrJ连接到Solr服务器,创建`SolrServer`对象,以及如何使用`SolrInputDocument`来添加、...
- **介绍**: SolrJ是Solr提供的Java客户端库,用于简化Solr服务器的交互过程。 **2. 添加SolrJ依赖** - **步骤说明**: 在项目的构建文件中添加SolrJ的依赖项。 - **操作详情**: 对于Maven项目,在`pom.xml`文件...
solrJ是Java连接solr进行查询检索和索引更新维护的jar包。
solr-solrj-4.9.0.jar
solrj工具类封装,包括条件批量查询,批量增删改,分段修改。
这部分代码展示了如何使用SolrJ等Solr的客户端库。 在导入和启动项目后,你需要根据描述中的提示修改数据库连接。这是因为Solr可以与多种数据源集成,如数据库,以便实时同步数据。在示例中,可能需要在配置文件中...
1. SolrJ:SolrJ 是 Solr 的 Java 客户端,可以使用 SolrJ 来访问 Solr 服务器。 2. 高级搜索:Solr 提供了高级搜索功能,包括 faceting、filtering、sorting 等。 京东案例: 1. 京东搜索:京东使用 Solr 来实现...
Solr-Solrj 是 Solr 的 Java 客户端库,提供了与 Solr 服务器进行交互的能力。它使得开发者能够方便地创建、更新和查询 Solr 索引,而无需关心底层通信细节。`solr-solrj` 模块中的 `org.apache.solr.client.solrj`...
SolrJ 6.3.0 是一个针对 Apache Solr 的 Java 客户端库,它使得在 Java 应用程序中与 Solr 服务器进行交互变得更加便捷。Solr 是一个流行的开源搜索引擎,用于处理和索引大量文本数据,提供高效、可扩展的全文搜索...