2014-10-03 102 views
1

我正在使用從Oracle數據庫填充的Solr實例。由於記錄是從Oracle數據庫中添加和刪除的,因此它們也應該從Solr中添加和刪除。在Solr中,如何獲取所有文檔的一個字段(文檔ID)列表?

schema.xml具有這種設置,我們用它來存儲也是oracle的主鍵的ID:

<uniqueKey>id</uniqueKey> 
<field name="id" type="string" indexed="true" stored="true"/> 

此外ID是不按順序。 solr管理界面並沒有太多的幫助,我只能看到ID和其他每條記錄,每次只能看到幾個分頁。

有這Solr的核心一百萬個文檔。

我可以很容易地從oracle數據庫中獲取記錄的ID,所以我想從solr索引中獲得文檔id的列表以供比較。

我一直沒能找到如何做到這一點,但我也可以搜索

回答

5

如果你真的需要得到ID的所有您的文檔,使用fl parameter的任何信息。東西是:

SolrQuery q = new SolrQuery("*:*&fl=id"); 
//        ^^^^^ 
//       return only the `id` field 
q.setRows(10000000); 
//  ^^^^^^^^ 
// insanely high number: retrieve _all_ rows 
// see: http://wiki.apache.org/solr/CommonQueryParameters#rows-1 
return server.query(q).getResults(); 

(未經測試)


對於Oracle和Solr中的內容進行簡單的比較,你可能只是想計數文件:

SolrQuery q = new SolrQuery("*:*"); 
q.setRows(0); 
//  ^
// don't retrieve _any_ row 
return server.query(q).getResults().getNumFound(); 
//         ^^^^^^^^^^^^^ 
//        just get the number of matching documents 

(未經測試)

+0

明白了!謝謝! ps:你的例子是什麼語言? – cwd 2014-10-03 15:35:59

+0

這工作得很好! – cwd 2014-10-03 15:46:47

+1

@cwd _「什麼語言?」_Java--或者更準確地說Java--因爲我沒有測試過它) – 2014-10-03 15:48:25

1

在最新的Solr(4.10),你可以export large number of records

但是,如果您確實只需要一個字段,則可以使用該字段發出請求並導出爲CSV。這最大限度地減少了格式化開銷。

+0

謝謝@Alexandre! – cwd 2014-10-06 16:52:49

相關問題