Запрос Solr через Solrj: основы
Я пытаюсь запросить solr через solrj в Eclipse. Я пробовал последние 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. Я запускаю windows7 с tomcat7 и solr 3.5. Все, что я пытаюсь сделать на данный момент, это базовый запрос и получить результаты в каком-то списке, массиве, что угодно. Когда я спрашиваю:http://localhost:8080/solr/select/?q=outside
в firefox результаты возвращаются просто отлично.
2 ответов
вот как я получил Solrj (Solr 3.6), работающий над моей коробкой Windows7 с eclipse:
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);
}
}
мне пришлось загрузить дополнительные банки (вне Solr 3.6) для этого: httpcomponents-client-4.2-beta1
в общей сложности мне нужно было 4 банки, чтобы получить эту работу :
- apache-solr-solrj-3.6.0.Джар
- httpclient-4.2-beta1.Джар
- httpcore-4.2-beta1.Джар
- httpmime-4.2-beta1.Джар
Я не уверен, если мое решение считается лучшей практикой с точки зрения boilercode, но оно решает проблему вставания на solrj w/ eclipse.
на org.slf4j.Сио.LocationAwareLogger класс обеспечивается slf4j-api jar. Какую версию вы используете? Solr 3.5 требует версии 1.6.1, я подозреваю, что вы используете версию eariler.
Если вы ищете быстрый запуск Solrj, я бы рекомендовал переключиться на Groovy. Он может загружать зависимости jar во время выполнения с помощью возьмите аннотации. Пример: