我在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之间的分布。据我所知,只有当我将响应合并到一个集合时,我才能得到适当的分配。希望我能理解?
答案 0 :(得分:1)
从搜索结果中检索DocList后,不应更改DocList。
我有类似的问题,如果我没记错的话,我用过:
org.apache.solr.util.SolrPluginUtils.docListToSolrDocumentList
将DocList
转换为SolrDocumentList
,ArrayList<SolrDocument>
扩展add(SolrDocument)
,从而支持DocList
。
因此,最糟糕的情况(从性能角度来看)是将第一个SolrDocumentList
转换为DocLists
,然后在每个文档上循环遍历所有其他add
调用{{1}} 。
你必须测试这种方法的效率。我不是Solr专家,但这是我开始测试的地方。