![](/img/trans.png)
[英]how i can retrieve all rows depend on one emp_id in ORACLE SQL?
[英]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.