以下内容译自Solr Wiki官方文档,版权没有,随意转载.

Solrj 是一个访问solr的Java客户端。它提供了一个java接口用于添加更新和查询solr索引。本页面介绍SolrJ最新版本1.4在Solr 1.4.x及其在附带war包中的使用,关于SolrJ在Solr1.3和Solr1.2的使用教程请移步Solrj1.3 Wiki

SolrJ/Solr版本交叉的兼容性说明

SolrJ通常保持向后兼容性,因此你可以在较老版本的Solr上使用较新版本的SolrJ,或者在较新版本的Solr上使用较老版本的SolrJ。但是有些细微的区别需要注意:

如果你混合使用1.x和较新的主版本,必须设置响应XML解析器,因为两个版本使用了不兼容的Java bin。

server.setParser(new XMLResponseParser());

只要不将发起请求改变成二进制流,混合使用3.x和4.x或者混合之后的版本,通常没有太大问题(在SOLR-3038中有关于将默认请求改为二进制流的讨论)。如果这样做,3.x和更高版本的兼容性问题需要通过发起一个明确描述XML的版本的请求来决定。在SOLR-4820中有关于自动传输检测这种行为的讨论。

Java bin的格式是个例外,它在各个大版本之间互不兼容。不能使用javabin在1.4.1和以上版本或者3.1和更高版本之间通信(因为在协议中改变了字符编码)。也不能采用java bin的方式用于4.x的客户端和包括3.x在内之前版本的服务端进行通信,因为这样的改变会妨碍服务url的映射,也违反了向后不兼容的协议。在这种情况下,仅仅是不提供SolrServer的请求写入流,仍然可以得到默认的(XML)线性格式。

如果使用较老版本的SolrJ和4.x或者更新的Solr服务,很大可能是因为想从4.0的SolrJ中得到在之前的老版本的SolrQuery对象中所没有的setRequestHandler方法。值得注意的是,这个方法尤为重要当SolrJ比Solr要更新的时候。

设置Classpath

SolrJ用到的jar包分布在以下几个文件夹:/dist、/dist/solrj-lib 和 /lib,使用SolrJ最小可用jar包集合(可根据使用场景获取更多依赖)清单如下:

/dist文件夹

  • apache-solr-solrj-*.jar

/dist/solrj-lib文件夹

  • commons-codec-1.3.jar
  • commons-httpclient-3.1.jar
  • commons-io-1.4.jar
  • jcl-over-slf4j-1.5.5.jar
  • slf4j-api-1.5.5.jar

/lib文件夹

  • slf4j-jdk14-1.5.5.jar

Maven

SolrJ可以从官方Maven库中获得,在pom.xml中添加如下依赖即可使用SolrJ相关API:

<dependency>
<artifactId>solr-solrj</artifactId>
<groupId>org.apache.solr</groupId>
<version>1.4.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

如果需要使用EmbeddedSolrServer模式,同时需要添加Solr Core的依赖:

<dependency>
<artifactId>solr-core</artifactId>
<groupId>org.apache.solr</groupId>
<version>1.4.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

另外,使用EmbeddedSolrServer时需要注意SolrJ依赖Servlet API,通常Servlet API已经作为Web项目的基础依赖包含在项目中,但即时是命令行项目,同样需要包含Servlet API依赖:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

如果程序中抛出NoClassDefFoundError异常,则可能需要如下依赖:

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.5.6</version>
</dependency>

如果使用Solr-SolrJ 1.4.1和Slf4j-simple 1.5.6,可能会由于slf4j-api的改变引起IllegalAccessError,SolrJ建议使用slf4j-api 1.5.5和slf4j-simple 1.5.5或者其他的适当版本。

HttpSolrServer

SolrJ API 官方文档最佳实践的更多相关文章

  1. 【Android API】Android 4.1 API官方文档详解

    原文:http://android.eoe.cn/topic/summary 翻译:[eoeAndroid原创团队]kris.流风而逝.贼寇在何方.snowxwyo.lsy4833406 更新日期:2 ...

  2. 《Spark Python API 官方文档中文版》 之 pyspark.sql (一)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  3. 《Spark Python API 官方文档中文版》 之 pyspark.sql (二)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  4. 《Spark Python API 官方文档中文版》 之 pyspark.sql (四)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  5. 《Spark Python API 官方文档中文版》 之 pyspark.sql (三)

    摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...

  6. Restful API官方文档

    理解Restful架构:http://www.ruanyifeng.com/blog/2011/09/restful RESTful设计指南:http://www.ruanyifeng.com/blo ...

  7. Search API 官方文档 可以用了查看自己的app

    Search API October 24, 2012 - HTTPS is now supported for Search and Lookup requests. Please update y ...

  8. ElasticSearch(6.2.2)的java API官方文档的总结 (三)

    一 : SearchRequest用于任何与搜索文档,聚合和建议有关的操作,并且还提供了对生成的文档进行高亮显示的方法. 在最基本的形式中,我们可以向请求添加一个查询:    1:添加一个Search ...

  9. lua api 官方文档 函数后面的方括号 说明 [-0, +0, –]

    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段.c++/lua/windows逆向交流群:69148232 每一个lua api 函数结尾都给出了这样的说明例如: ...

随机推荐

  1. 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化

    挺好的数位dp……先说一下我个人的做法:经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所有数 ...

  2. 一步步创建第一个Docker App —— 1. 背景介绍

    原文:https://docs.docker.com/engine/getstarted-voting-app/#/docker-stacks-and-services 你将会学习什么    本文创建 ...

  3. 洛谷 P1446 [HNOI2008]Cards 解题报告

    P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...

  4. 用C语言获取任意文件的长度(可能大于2GB)#define _FILE_OFFSET_BITS 64

    打开文件后用 fseek() 函数把文件位置指针移动到文件的末尾,用 ftell() 获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.但是这样做也会受到下面的限制:ftell() 函数的返 ...

  5. android:onClick="xxx"

    一般监听OnClickListener事件,我们都是通过Button button = (Button)findViewById(....); button.setOClickLisener....这 ...

  6. python之旅:绑定方法与非绑定方法

    一 类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法.                 为 ...

  7. MySQL 第七篇:视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  8. Activiti工作流的应用示例 (官方guide项目方式)

    转: Activiti工作流的应用示例 1.新建流程模型 模型管理->模型工作区 点击“创建”后会立即跳转到“流程在线设计器”页面,请参考下一节 2.在线流程设计器 模型管理->模型工作区 ...

  9. 1.Qt简介

    附件列表 1.Qt简介.png

  10. 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文 ...