java json solr solrj

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:

  1. Indexe el servidor JSON en solr para los 3 servicios.

  2. 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.