Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 在Solr中,如何为所有文档获取一个字段(文档id)的列表?_Oracle_Solr_Indexing_Lucene - Fatal编程技术网

Oracle 在Solr中,如何为所有文档获取一个字段(文档id)的列表?

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管理界面没有太大的帮助

我正在使用一个从oracle数据库填充的Solr实例。随着记录从oracle数据库中添加和删除,它们也应该从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());