Использование solrj для получения SolrDocument в формате json

Как указать SolrQuery для возврата данных в формате json? Вот код, который я использую для запроса данных: как только я получу SolrDocument, как я могу преобразовать его в объект/строку json?

 SolrQuery sQuery = new SolrQuery();
 sQuery.setQuery("name:test");
 QueryResponse resp = server.query(sQuery);
 SolrDocumentList docs = resp.getResults();

person rrr    schedule 22.10.2012    source источник


Ответы (3)


SolrJ предназначен для извлечения/преобразования документа в соответствии с вашим определенным POJO. Если вы хотите преобразовать документ в JSON, вам потребуется использовать библиотеку, например Jackson, чтобы выполнить преобразование. из SolrDocument в JSON.

Не уверен, что это вариант для вас, но хотел бы упомянуть, что вы можете рассмотреть возможность получения ответа от Solr, уже отформатированного как JSON. Дополнительные сведения см. в разделе SolJSON. В этом случае вам не нужно будет использовать SolrJ. Проще всего было бы использовать прямой http-вызов (через клиентскую библиотеку java http) и получить ответ JSON от Solr, используя методы SolJSON.

person Paige Cook    schedule 22.10.2012
comment
Не могли бы вы рассказать мне, как я могу указать получение документа solr в json с помощью java - в документации SolJSON не указано, как установить параметр запроса в Java? - person rrr; 22.10.2012
comment
Предыдущее обсуждение списка пользователей Solr должно помочь — lucene.472066 .n3.nabble.com/SolrJ-Response-JSON-td1002024.html - person Paige Cook; 22.10.2012
comment
На самом деле это не ответило на мой вопрос, похоже, мне пришлось прочитать SolrDocument и добавить пары значений ключа в JSONObject, чтобы получить действительную строку json для возврата пользователю. Что касается способа POJO, поскольку мой Pojo содержит сложные типы, мне пришлось добавить сложный тип в качестве SolrPlugin и определить его в schema.xml, но когда я сохранил POJO, сложный тип был сохранен как нуль - какие-либо предложения о том, как заставить это работать? - person rrr; 22.10.2012
comment
Сложные типы не поддерживаются только простыми типами SolrJ. См. этот предыдущий ответ: -field-in-index" title="solrj, как хранить и извлекать listpojo через многозначное поле в индексе"> stackoverflow.com/questions/6633684/ - person Paige Cook; 22.10.2012
comment
Кроме того, нет собственного способа получить JSON непосредственно из Solr с помощью библиотеки SolrJ. Как я уже говорил, библиотека Джексона может за вас выполнить преобразование SolrDocument в JsonObject. Или вы можете просто использовать прямой http-вызов (через клиентскую библиотеку java http) и получить ответ JSON от Solr, используя методы SolJson. - person Paige Cook; 22.10.2012
comment
Большое спасибо за вашу помощь - на данный момент я реализовал вызов http-клиента - просто еще один быстрый вопрос, который лучше подходит для другого (Джексон против http-клиента) - я новичок в solr - и хочу реализовать наиболее эффективный способ - person rrr; 22.10.2012
comment
Нет предпочтительного способа, это все личные предпочтения. Инструменты и параметры предоставляются вам, чтобы вы могли решить, как лучше всего их использовать. IMO в этом случае, если все, что вам нужно, это JSON, то прямой http-вызов является самым простым и прямым. - person Paige Cook; 22.10.2012

Импортируйте класс JSONUTil из solrj, у него есть конвертер json для документов solr, или вы можете легко написать его, если увидите код этого класса:

import org.apache.noggit.JSONUtil;

SolrQuery sQuery = new SolrQuery();
sQuery.setQuery("name:test");
QueryResponse resp = server.query(sQuery);
SolrDocumentList docs = resp.getResults();
String returnValue = JSONUtil.toJSON(docs); //this has the json documents
person ravi    schedule 04.03.2013
comment
Я только что узнал, что JSONUTil чертовски глючит и создает некоторые странные рекурсивные документы. - person Nikita Volkov; 16.02.2017
comment
Я обновился с Solr 5.2 до 7.6, и при преобразовании Solr Docs в JSON у меня возникла ошибка StackOverflowError (com.fasterxml.jackson.databind.type.TypeFactory). Изменение автора JSON на noggit решило проблему. - person s1m3n; 27.12.2018

Вы также можете сделать это с помощью GSON.

SolrDocumentList SolrResponse = searchWithSolr();
Gson gson = new Gson();
if (SolrResponse.size()!=0) {
  System.out.println(gson.toJson(SolrResponse));
  interpolMap.put("interpol", gson.toJson(InterpolSolrResponse));
}

person shivadarshan    schedule 15.06.2017