在SOLR中操作DocList

时间:2012-03-29 11:25:03

标签: solr solrj

我在solr中编写了一个自定义请求处理程序,以满足我的业务需求。处理程序涉及从两个不同的SolrIndexSearchers获取数据。我希望将两个SolrIndexSearchers中返回的文档列表合并为一个。

我尝试迭代一个并通过doc将doc添加到另一个,但我能得到的只是一个“不支持的操作”异常。无论如何要合并两个文件列表吗?

[编辑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和机器2的响应1之间的分布。据我所知,只有当我将响应合并到一个集合时,我才能得到适当的分配。希望我能理解?

1 个答案:

答案 0 :(得分:1)

从搜索结果中检索DocList后,不应更改DocList。

我有类似的问题,如果我没记错的话,我用过:

org.apache.solr.util.SolrPluginUtils.docListToSolrDocumentList

DocList转换为SolrDocumentListArrayList<SolrDocument>扩展add(SolrDocument),从而支持DocList

因此,最糟糕的情况(从性能角度来看)是将第一个SolrDocumentList转换为DocLists,然后在每个文档上循环遍历所有其他add调用{{1}} 。 你必须测试这种方法的效率。我不是Solr专家,但这是我开始测试的地方。