ClassNotFoundException HttpRequestInterceptor

在 solr 3.6 中,客户端使用 solrj 时

HttpSolrServer server = new  HttpSolrServer("http://localhost:8080/solr/");

时报一个错

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpRequestInterceptor
该错误的原因是没有集成以下几个 jar

httpclient-4.1.3.jar
httpclient-cache-4.1.3.jar
httpcore-4.1.4.jar
httpmime-4.1.3.jar

这几个 jar 在 solr 3.6 的发行包中并没有集成,需要从这里下载

http://archive.apache.org/dist/httpcomponents/httpclient/binary/httpcomponents-client-4.1.3-bin.zip

利用 solrj 提交索引

首先创建一个 SolrInputDocument 对象,然后设置其字段值,通过 SolrServer’s  的 add() 方法,将文档提交给 solr,实例代码如下:

String urlString = "http://localhost:8983/solr";
SolrServer solr = new CommonsHttpSolrServer(urlString);
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "552199");
document.addField("name", "Gouda cheese wheel");
document.addField("price", "49.99");
UpdateResponse response = solr.add(document);
//最后记得 commit 使索引生效</div>
solr.commit();

solrj 执行查询

执行查询使用的是 query() 方法。查询时需要发送一个 SolrQuery 对象,然后会返回一个 QueryResponse 对象,这个对象在 org.apache.solr.client.solrj.response 包下。
SolrQuery 对象中可以设置查询参数,
SolrQuery parameters = new SolrQuery();
parameters.set("q", mQueryString);
这是使用默认请求处理器,要查询的关键字是 mQueryString。
也可以指定请求处理器,如下所示:
parameters.set("qt", "/spellCheckCompRH");
有了查询条件后,就可以提交一个查询了:
QueryResponse response = solr.query(parameters);
这个客户端发起一个网络连接,发送查询条件,solr 执行查询,然后返回结果到客户端,客户端将结果解析成 QueryResponse。
通过 QueryResponse 的 getResults() 方法得到查询到的文档,也可以通过其他方法从中得到高亮和层面的结果。
SolrDocumentList list = response.getResults();

Solrj

Solrj 是 Solr 的 java 语言的客户端,用于 java 语言跟 solr 服务器通讯。使用 solrj ,可以在 java 程序中像本地方法一样调用 solr 的远程接口。 solrj 在 org.apache.solr.client.solrj 包下,包含 5 个类。使用时,首先创建一个 SolrServer,通过 SolrServer ,发送 SolrRequests 或 SolrQuerys 得到 SolrResponses。 SolrServer 是 abstract,它有两个实现,一个是 org.apache.solr.client.solrj.impl.CommonsHttpSolrServer,通过 http 方式和 solr 通讯。

String urlString = "http://localhost:8983/solr";

SolrServer solr = new CommonsHttpSolrServer(urlString);

创建 SolrServer 时并没有发生网络连接,执行一个查询或其他操作时才有网络连接。但是创建 SolrServer 时当使用一个错误的 URL 时,或抛出 MalformedURLException 的异常。 创建 SolrServer 后,可以执行像 query(), add() 和 commit() 这些方法。

solr 客户端 API

截止2011年11月,Solr 已经有以下客户端:

名称 语言 URL
SolRuby Ruby http://wiki.apache.org/solr/SolRuby
DelSolr Ruby http://delsolr.rubyforge.org/
acts_as_solr Rails http://acts-as-solr.rubyforge.org/,http://rubyforge.org/projects/background-solr/
Flare Rails http://wiki.apache.org/solr/Flare
SolPHP PHP http://wiki.apache.org/solr/SolPHP
SolrJ Java http://wiki.apache.org/solr/SolJava
Python API http://wiki.apache.org/solr/SolPython
PySolr Python http://code.google.com/p/pysolr/
SolPerl Perl http://wiki.apache.org/solr/SolPerl
Solr.pm Perl http://search.cpan.org/~garafola/Solr-0.03/lib/Solr.pm
SolrForrest Forrest/Cocoon http://wiki.apache.org/solr/SolrForrest
SolrSharp C# http://www.codeplex.com/solrsharp
SolColdfusion ColdFusion http://solcoldfusion.riaforge.org/
SolrNet .NET http://code.google.com/p/solrnet/
AJAX AJAX http://github.com/evolvingweb/ajax-solr/wiki

客户端 API

Solr 是一个 web 应用,他支持各种客户端通过客户端的方式调用其搜索和索引等服务。客户端和服务端之间基于 HTTP 方式进行通讯。客户端可以创建 HTTP 请求,然后解析 HTTP respons 成各语言能识别的对象或结果,方便使用。查询默认是基于 get 方式,将查询所需参数放 url 中发送给 Solr,solr 解析出参数,并执行查询。solr 同时提供内嵌的方式,对于 Java 可以直接调用 Solr 相关的 API,这样不通过 http 方式,性能会相对好点。

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress