Solr通过HTTP上的游标将文档提取为CSV

时间:2018-01-08 14:48:10

标签: http serialization command-line solr export

Solr有一个很棒的streaming feature,允许通过游标快速获取大量文档(例如solrdump允许从命令行使用此功能)。

对于这些类型的游标查询,可以设置 wt  参数以及控制序列化,默认为 xml ,从Solr 5.5开始。

$ curl -v "http://solr/select?cursorMark=*&fl=...&q=...&sort=id+asc&wt=json"
                                                                    -------

但是,要使流式查询起作用,必须从每个响应中解析 nextCursorMark 。使用JSON和XML,这只是另一个字段,但 wt 设置为 csv 时,无法容纳此信息(至少不在有效负载中)。

{
  ...
  },
  "nextCursorMark": "AoE4YWktNDgtUTAxRlgxODFNakU1TVRFeU1R"
}

我的第一个想法是 nextCursorMark 可能会在HTTP标头中发送,但似乎不是。

$ curl -v http://ex.index/solr/select?...wt=csv
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Last-Modified: Fri, 05 Jan 2018 00:04:25 GMT
< ETag: "ZTM2MDQ4MDAwMDAwMDAwMFNvbHI="
< Content-Type: text/plain; charset=UTF-8
< Transfer-Encoding: chunked
<
----8<---- body ----8<----

是否可以将这种查询与 CSV格式一起使用?我很好奇,因为如果发送方和接收方都可以使用CSV而不是JSON或XML,我会期望获得轻微的性能提升。

更新

似乎已在SolrCore.java中的标题中放入了一些信息(状态,查询时间)。可能仅与ADMINalso in V2 - V2 docs一起使用。

1 个答案:

答案 0 :(得分:2)

如您所见[{3}},不支持该功能。如果你有一些你可以排序的唯一id,你可以像那里解释的那样滚动你自己的cursorMark(仍然使用wt = csv)。我做了大量移植,接近10亿个文档,工作得很好。

重要提示,索引不得写入,或者如果是:

  1. 您使用的ID应该仅针对新文档增加(例如数据库中的时间戳或序列ID)
  2. 如果没有,你必须处理在第二次通过后开始插入的任何文档(你可能会加倍处理一些文档)