通过 Solrj 查询 Solr:基础
Posted
技术标签:
【中文标题】通过 Solrj 查询 Solr:基础【英文标题】:Querying Solr via Solrj: Basics 【发布时间】:2012-05-02 20:46:57 【问题描述】:我正在尝试通过 Eclipse 中的 solrj 查询 solr。 我试过最新的solrj wiki例子:
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
import java.net.MalformedURLException;
public class SolrQuery2
public static void main(String[] args) throws MalformedURLException, SolrServerException
SolrServer solr = new CommonsHttpSolrServer("http://localhost:8080/solr");
// http://localhost:8080/solr/select/?q=outside
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("qt", "/select");
params.set("q", "outside");
QueryResponse response = solr.query(params);
System.out.println("response = " + response);
但是,无论我做什么,我都无法克服这个错误:
Exception in thread "main" java.lang.NoSuchMethodError:
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
接下来,我尝试了食谱示例:
import java.util.Iterator;
import org.apache.solr.client.solrj.SolrQuery; //Error: The import org.apache.solr.client.solrj.SolrQuery conflicts with a type defined in the same file
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
public class SolrQuery
public static void main(String[] args) throws Exception
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr");
server.setParser(new XMLResponseParser());
SolrQuery query = new SolrQuery();
query.setQuery("document"); //Error: The method setQuery(String) is undefined for the type SolrQuery
query.setStart(0); //Error: The method setStart(int) is undefined for the type SolrQuery
query.setRows(10); //Error: The method setRows(int) is undefined for the type SolrQuery
QueryResponse response = server.query(query); //Error: The method query(SolrParams) in the type SolrServer is not applicable for the arguments (SolrQuery)
SolrDocumentList documents = response.getResults();
Iterator<SolrDocument> itr = documents.iterator();
System.out.println("DOCUMENTS");
while(itr.hasNext())
SolrDocument doc = itr.next();
System.out.println(doc.getFieldValue("id")+":"+doc.getFieldValue("content"));
但是,对于当前的 api,该示例可能已过时,因为我什至无法导入 SolrQuery 库。
有没有人有一个有效的快速样板示例?
提前谢谢你。
PS。我正在使用 tomcat7 和 solr 3.5 运行 windows7。在这一点上,我要做的只是一个基本的查询,并将结果以某种列表、数组等形式返回。当我在 Firefox 中查询:http://localhost:8080/solr/select/?q=outside
时,结果返回就好了。
【问题讨论】:
【参考方案1】:以下是我如何让 Solrj (Solr 3.6) 使用 Eclipse 在我的 Windows7 机器上工作:
import java.net.MalformedURLException;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
public class SolrQuery
public static void main(String[] args) throws MalformedURLException, SolrServerException
SolrServer server = new HttpSolrServer("http://localhost:8080/solr");
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("q", "1");
QueryResponse response = server.query(params);
System.out.println("response = " + response);
我必须下载额外的 jars(在 Solr 3.6 之外)才能工作:httpcomponents-client-4.2-beta1
总共需要 4 个罐子才能正常工作:
apache-solr-solrj-3.6.0.jar httpclient-4.2-beta1.jar httpcore-4.2-beta1.jar httpmime-4.2-beta1.jar我不确定我的解决方案是否被认为是锅炉代码方面的最佳实践,但它解决了在 solrj w/eclipse 上起床的问题。
【讨论】:
我完全使用了上面的 Java 示例,但我的构建路径中需要有以下 jar 文件。 commons-logging-1.1.1.jar,httpclient-4.2.1.jar,httpcore-4.2.1.jar,httpmime-4.2.1.jar,slf4j-api-1.6.4.jar,slf4j-simple-1.6。 4.jar,solr-solrj-3.6.0.jar【参考方案2】:org.slf4j.spi.LocationAwareLogger 类由 slf4j-api jar 提供。你运行的是什么版本? Solr 3.5 需要 1.6.1 版本,我怀疑您使用的是早期版本。
如果您正在寻找 Solrj 快速入门,我建议您切换到 Groovy。它可以在运行时使用Grab annotations 下载jar 依赖项。示例:
parse Solr xml files to SolrInputDocument【讨论】:
马克,谢谢您的回复。可以肯定的是,我下载了 Solr 3.6,进行了设置并加载了一些文档。我创建了一个新的 Eclipse 项目和类,然后加载了新的 jars(从 3.6 开始),现在是库:org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;有一条线穿过它并声明:类型 CommonsHttpSolrServer 已弃用并且不会编译(错误输出)。我宁愿坚持使用 j2se,因为我对它很满意。任何更多的想法都非常感谢。再次感谢。 编辑:使用:import org.apache.solr.client.solrj.SolrServer;而不是:org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;在 3.6 中更正了上述问题(原始发布的问题)。然而 QueryResponse response = server.query(params);仍然会触发上面相同的错误...仅供参考,以防有人也遇到这种情况... 该类已被 Jira 问题 SOLR-2020 弃用。根据 Javadocs,它被“HttpSolrServer”取代,但这引入了对 Apache Http 组件库的新依赖(参见:wiki.apache.org/solr/ReleaseNote36) "org.apache.solr.client.solrj.SolrServer" 是一个抽象类...不确定如何解决您的问题,因为您无法实例化它以上是关于通过 Solrj 查询 Solr:基础的主要内容,如果未能解决你的问题,请参考以下文章