java - Recuperar objeto de Solr
json solrj (2)
Entonces, tengo un proyecto web basado en Java que muestra información recuperada de 3 servicios separados, alojado en diferentes servidores, utilizo Apache Http Client para recuperar información mediante la API REST en JSON , usando la biblioteca Gson . Convierto el Json en POJO que utilizo para mostrar información.
Ahora quiero implementar la función de búsqueda en mi proyecto, así que instalé Solr en un servidor por separado, lo que quiero es:
Indexe el servidor JSON en solr para los 3 servicios.
Obtener el resultado de búsqueda de Solr en forma de POJO descrito en mi proyecto
Sé que el punto (1) puede ser hecho por jsonRequestHandler
, pero no quiero escribir una lógica separada para indexar, estoy usando Solrj en mi proyecto para extraer información.
Entonces quiero saber
- ¿Puede solrj usar mi definición de POJO para analizar los resultados de búsqueda?
- también cualquier posible flujo de trabajo para el escenario de trabajo anterior, y las herramientas requeridas (soy nuevo en solrj)?
Mapeo de un POJO para Solr
Para hacerlo, debe anotar los campos / métodos de acceso de su POJO con org.apache.solr.client.solrj.beans.Field
-Annotation.
Por supuesto, esos campos deben coincidir con los campos de su esquema.xml, ya sea por su nombre directamente o por el nombre al que apunta Solr dando el nombre en la anotación de campo.
Como ejemplo, tiene la siguiente definición de fields
en su schema.xml
<fields>
<field name="id" type="int" indexed="true" stored="true" multiValued="false" />
<field name="title" type="string" indexed="true" stored="true" multiValued="false" />
</fields>
Entonces tendrías un POJO como este
import org.apache.solr.client.solrj.beans.Field;
public class SampleDocument {
public SampleDocument() {
// required for solrj to make an instance
}
public SampleDocument(int id, String title) {
this.id = id;
this.title = title;
}
public String getTitle() {
return title;
}
@Field("title")
public void setTitle(String title) {
this.title = title;
}
}
Usando un POJO para actualizar el Índice de Solr
El código para indexar esos POJO es bastante directo. Puede usar solrj''s SolrServer para ese propósito.
// connect to your solr server
SolrServer server = new HttpSolrServer("http://HOST:8983/solr/");
// adding a single document
SampleDocument document = new SampleDocument(1, "title 1");
server.addBean(document);
// adding multiple documents
List<SampleDocument> documents = Arrays.asList(
new SampleDocument(2, "title 2"),
new SampleDocument(3, "title 3"));
server.addBeans(documents);
// commit changes
server.commit();
// query solr for something
QueryResponse response = server.query(new SolrQuery("*:*"));
// get the response as List of POJO type
List<SampleDocument> foundDocuments = response.getBeans(SampleDocument.class);
Otras lecturas
Los resultados son una redacción de nuestro código y las siguientes referencias
Sí, eso es posible, una vez hice algo similar. Pero creo que deberías escribir un convertidor, que buscaría los resultados de SolrDocumentList
y de cada SolrDocument
pondría el resultado en tu POJO.
Lea sobre cómo establecer los parámetros de consulta y obtener los resultados con solrj
, y creo que no sería un problema para usted hacer esto. El convertidor en sí debería ser fácil de escribir, ya que puede acceder a todos los campos indexados desde el resultado. También preste atención a reducir los resultados en sí.
Estas son algunas guías, ya que no tengo experiencia con la búsqueda de solr. No sé si te ayudará mucho, pero eso espero.