2012-03-29 59 views
0

我已經在solr中編寫了一個自定義請求處理程序來滿足我的業務需求。處理程序涉及從SolrIndexSearchers獲取兩個不同的數據。我想從兩個SolrIndexSearchers中返回的文檔列表合併爲一個。在SOLR中操作DocList

我試着迭代一個,然後將doc添加到另一個doc中,但是我所能得到的只是一個「Unsupported Operation」異常。無論如何要合併兩個文檔列表?

[編輯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結果1和結果2,我該如何合併到一起?

[編輯2]:問題不是異常/堆棧跟蹤。當我添加兩個響應時,當它是單個機器搜索時,我會在兩個響應集中得到結果。當它是分佈式搜索時,我只能得到機器1的響應1和機器2的響應1之間的分配。在我的理解中,只有當我將響應合併到一個集合時,我才能夠得到正確的分配。希望我能理解嗎?

+0

你可以把你正在使用的代碼添加到你的問題嗎? – javanna 2012-03-29 11:31:37

+0

完成@Javanna那麼你需要什麼? – Greenhorn 2012-03-29 11:40:38

+0

不確定,你可以請添加你的stacktrace嗎? – javanna 2012-03-29 11:55:26

回答

1

從檢索結果中檢索DocList後,不應更改DocList。

我有類似的問題,如果我沒有記錯,我用:

org.apache.solr.util.SolrPluginUtils.docListToSolrDocumentList 

DocList轉換爲SolrDocumentList,延伸ArrayList<SolrDocument>,其結果支持add(SolrDocument)

因此,最壞的情況(從性能的角度來看)是通過所有其他DocLists呼籲每個文檔add轉換的第一DocListSolrDocumentList,然後循環。 你必須測試這種方法的有效性。我不是Solr的專家,但這是我開始測試的地方。