【问题标题】:In Solr, how can I get a list of one field ( document id ) for all documents?在 Solr 中,如何获取所有文档的一个字段(文档 id)的列表?
【发布时间】:2014-11-28 06:20:12
【问题描述】:

我正在使用从 oracle 数据库填充的 Solr 实例。当从 oracle 数据库中添加和删除记录时,它们也应该从 Solr 中添加和删除。

schema.xml 有这个设置,我们用它来存储 ID,它也是 oracle 中的主键:

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

此外,ID 不是按顺序排列的。 solr 管理界面没有太大帮助,我只能看到 ID 以及每条记录的其余部分,一次几个,分页。

这个 solr 核心中有大约一百万个文档。

我可以很容易地从 oracle 数据库中获取记录的 ID,因此我还想从 solr 索引中获取文档 id 的列表以进行比较。

我无法找到有关如何执行此操作的任何信息,但我可能正在搜索

【问题讨论】:

    标签: oracle solr indexing lucene


    【解决方案1】:

    如果您确实需要获取所有文档的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
    

    (未经测试)

    【讨论】:

    • 知道了!谢谢! ps:你的例子是什么语言的?
    • @cwd "什么语言?" Java -- 或者更准确地说是类似 Java,因为我还没有测试过;)
    【解决方案2】:

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

    但是,如果您真的只需要一个字段,您可以使用该字段提出请求并导出为 CSV。这样可以最大限度地减少格式化开销。

    【讨论】:

      【解决方案3】:

      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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 2021-10-09
        • 2019-09-18
        • 2022-08-24
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        相关资源
        最近更新 更多