Управление DocList в SOLR - PullRequest
       1

Управление DocList в SOLR

0 голосов
/ 29 марта 2012

Я написал собственный обработчик запросов в solr для удовлетворения моих бизнес-требований.Обработчик включает в себя получение данных от двух разных из SolrIndexSearchers.Я хочу, чтобы возвращенные списки из двух SolrIndexSearchers были объединены в один.

Я пробовал перебирать один и добавлять документ по документу к другому, но все, что я мог получить, это исключение «Неподдерживаемая операция».Есть ли способ объединить два списка документов?

[Edit 1]: Фрагмент кода внутри переопределенного метода handleRequestBody

   SolrCore core = new SolrCore("Desired Directory 1", schema);
   reader = IndexReader.open("Desired Directory 1");
   searcher = new SolrIndexSearcher(core, schema, getName(), reader, false);
   Sort lsort = null;
   FilteredQuery filter = null;
   DocList results1 = searcher.getDocList(query, filter, lsort, 0, 10);
   reader.close();
   searcher.close();
   core.close();
   SolrCore core = new SolrCore("Desired Directory 2", schema);
   reader = IndexReader.open("Desired Directory 2");
   searcher = new SolrIndexSearcher(core, schema, getName(), reader, false);
   Sort lsort = null;
   FilteredQuery filter = null;
   DocList results2 = searcher.getDocList(query, filter, lsort, 0, 10);
   reader.close();
   searcher.close();
   core.close();
   rsp.add("response",results1);
   rsp.add("response",results2);

Теперь, когда у меня есть два списка DocLists Results1 и Results2, как мне объединить их??

[Правка 2]: проблема не в трассировке исключений / стека.Когда я добавляю два ответа, я получаю результаты в двух наборах ответов, когда это поиск одной машины.Когда это распределенный поиск, я получаю распределение только между ответом 1 машины 1 и ответом 1 машины 2. В моем понимании, только когда я объединю ответы в один набор, я смогу получить правильное распределение.Надеюсь, мне понятно?

1 Ответ

1 голос
/ 31 марта 2012

DocList не должен изменяться после извлечения его из результата поиска.

У меня была похожая проблема, и, если я правильно помню, я использовал:

org.apache.solr.util.SolrPluginUtils.docListToSolrDocumentList

дляпреобразовать DocList в SolrDocumentList, что расширяет ArrayList<SolrDocument>, что, следовательно, поддерживает add(SolrDocument).

Таким образом, наихудший сценарий (с точки зрения производительности) - преобразовать первый DocList в SolrDocumentList а затем переберите все остальные DocLists, вызывая add в каждом документе.Вам придется проверить, насколько эффективен этот подход.Я не эксперт по Solr, но именно здесь я бы начал тестирование.

...