Oracle 在Solr中,如何为所有文档获取一个字段(文档id)的列表?
我正在使用一个从oracle数据库填充的Solr实例。随着记录从oracle数据库中添加和删除,它们也应该从Solr中添加和删除Oracle 在Solr中,如何为所有文档获取一个字段(文档id)的列表?,oracle,solr,indexing,lucene,Oracle,Solr,Indexing,Lucene,我正在使用一个从oracle数据库填充的Solr实例。随着记录从oracle数据库中添加和删除,它们也应该从Solr中添加和删除 schema.xml有这样的设置,我们使用它来存储ID,该ID也是oracle中的主键: <uniqueKey>id</uniqueKey> <field name="id" type="string" indexed="true" stored="true"/> id 此外,ID不是按顺序排列的。solr管理界面没有太大的帮助
schema.xml
有这样的设置,我们使用它来存储ID,该ID也是oracle中的主键:
<uniqueKey>id</uniqueKey>
<field name="id" type="string" indexed="true" stored="true"/>
id
此外,ID不是按顺序排列的。solr管理界面没有太大的帮助,我只能看到ID以及每个记录的其余部分,一次几个,分页
这个solr核心大约有一百万个文档
我可以很容易地从oracle数据库中获取记录的id,因此我还想从solr索引中获取文档id
,以进行比较
我无法找到有关如何执行此操作的任何信息,但我可能正在搜索如果您确实需要获取所有文档的id,请使用。诸如此类:
SolrQuery q=newsolrquery(“*:*&fl=id”);
// ^^^^^
//仅返回'id'字段
q、 设置行数(10000000);
// ^^^^^^^^
//数量高得离谱:检索所有行
//见:http://wiki.apache.org/solr/CommonQueryParameters#rows-1
返回server.query(q.getResults();
(未经测试):
要在Oracle和Solr中的内容之间进行简单比较,您可能只需要计算文档数:
SolrQuery q=newsolrquery(“*:*”);
q、 设置行(0);
// ^
//不检索任何行
返回server.query(q.getResults().getNumFound();
// ^^^^^^^^^^^^^
//只需获取匹配文档的数量
(未经测试):
在最新的Solr(4.10)中,您可以
但是,如果您真的只需要一个字段,则可以使用该字段发出请求并导出为CSV。这最大限度地减少了格式开销。对于Solr 7,语法有点变化。这就是我的工作原理(在Java中):
CloudSolrClient-solrClient=。。。;
solrClient.setDefaultCollection(“collection1”);
SolrQuery q=新的SolrQuery(“*:*”);
q、 集合(“fl”、“id”);
q、 设置行数(10000000);
Set uniqueIds=solrClient.query(q).getResults()
.stream().map(x->(字符串)x.get(“id”))
.collect(收集器.toSet());
明白了!谢谢ps:您的示例使用的是哪种语言?@cwd“什么语言?”Java——或者更确切地说是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());