2013-10-01 2 views
3

Итак, у меня есть Java веб-проект на основе, который отображает информацию, получаемую из 3 отдельных сервисов, размещенный на разных серверах, я использую Apache HTTP Client для получения информации через REST API в JSON, используя Gson library. Я конвертирую Json в POJO, который я использую для отображения информации.Получить объект из Solr

Теперь я хочу, чтобы реализовать функцию поиска в моем проекте, поэтому я установил Solr на отдельном сервере, что я хочу:

  1. Индексирование JSON в Solr сервер для всех 3-х услуг.

  2. выборка результатов поиска из Solr в виде POJO, описанных в моем проекте

Я знаю, что точка (1) может быть сделана jsonRequestHandler, но я не хочу писать отдельную логику для индекса , Я использую Solrj в своем проекте для извлечения информации.

Так что я хочу знать

  • может solrj использовать мое определение POJO для анализа результатов поиска?
  • также любой возможный рабочий процесс для выше рабочего сценария и инструменты требуется (я новичок в solrj)?

ответ

8

Картирование POJO для Solr

Для этого вам нужно аннотирования поля/Аксесс-методы вашей POJO с org.apache.solr.client.solrj.beans.Field -Annotation.

Конечно, эти поля должны совпадать с полями вашего schema.xml либо по их имени, либо по имени, на которое вы указываете Solr, указав имя в аннотации поля.

В качестве примера у вас есть следующее определение fields в вашей схеме.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> 

Тогда вы бы POJO как этот

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; 
    } 

} 

с использованием POJO для обновления Предм.указателя в Solr

Кода индексировать этот POJOs является довольно прямо вперед. Вы можете использовать SolrServer SolrS для этой цели.

// 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); 

Дальнейшее чтение

Результаты являются подправить наш код и следующие ссылки

0

Да, это возможно, я делал что-то подобное однажды. Но я думаю, что вы должны написать какой-то конвертер, который будет извлекать результаты из SolrDocumentList, а из каждого SolrDocument поместить результат в POJO.

Подробнее о настройке параметров запроса и получении результатов с помощью solrj, и я думаю, для вас это не проблема. Сам конвертер должен быть легко написан, потому что вы можете получить доступ к каждому полю, индексированному из результата. Также обратите внимание на сужение результатов.

Это несколько руководств, поскольку я не чувствую себя опытным поиском. Я не знаю, поможет ли вам это, но я надеюсь.

Смежные вопросы