簡體   English   中英

在Solr中,如何獲取所有文檔的一個字段(文檔ID)的列表?

[英]In Solr, how can I get a list of one field ( document id ) for all documents?

我正在使用從oracle數據庫填充的Solr實例。 當從oracle數據庫添加和刪除記錄時,它們也應該從Solr中添加和刪除。

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

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

此外,這些ID並不是按順序排列的。 solr管理界面沒有多大幫助,我只能看到ID以及每個記錄的其余部分,一次一些,分頁。

此Solr核心中約有一百萬份文檔。

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

我無法找到有關如何執行此操作的任何信息,但我可能正在搜索

如果您確實需要獲取所有文檔的ID ,請使用fl參數 這樣的東西:

 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 

(未經測試)

在最新的Solr(4.10)中,您可以導出大量記錄

但是,如果您真的只想要一個字段,則可以使用該字段發出請求並導出為CSV。 這最小化了格式化開銷。

對於Solr 7語法已經改變了一點。 這是對我有用的(在Java中):

CloudSolrClient solrClient = ...;
solrClient.setDefaultCollection("collection1");
SolrQuery q = new SolrQuery("*:*");
q.set("fl", "id");
q.setRows(10000000);

Set<String> uniqueIds = solrClient.query(q).getResults()
  .stream().map(x -> (String) x.get("id"))
  .collect(Collectors.toSet());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM