缺少某些字段的 Solr 索引 tsv 文件

Solr indexing tsv file with some fields missing

我正在尝试在 Solr 中索引一个 TSV 文件,但奇怪的是,我拥有的 TSV 文件会随机丢失某些行中的某些字段。

我的 TSV 中的示例数据

0 abc 1 The quick brown fox jumps over the lazy dog 
0 abc 1 2 The quick brown fox jumps over the lazy dog 
0 abc 1 2 The quick brown fox jumps over the lazy dog 
0 abc 1 2 3 The quick brown fox jumps over the lazy dog 

headers会变成这样

id name num_1 num_2 num_3 description

第 1 行 - num_2 和 num_3 不存在

第 2 行 - num_3 不存在

第 3 行 - 全部存在

如何处理此文件以在 Solr 中建立索引?像这样的事情可以用 Solr 无缝处理,还是我需要预处理 TSV 并处理缺失的字段以便 Solr 为它们编制索引?

尝试将此文件加载到 solr 时遇到以下异常

<response>
<lst name="responseHeader"><int name="status">400</int><int name="QTime">145</int></lst><lst name="error"><str name="msg">CSVLoader: input=null, line=23,expected 8 values but got 6</str><int name="code">400</int></lst>
</response>

更新: @Fuu 感谢回复。

另一种提问方式: Solr 是否提供任何功能来理解索引时的字段?或者在索引之前编辑字段?

比如说,我的示例文档看起来像

token:n=1 token:name=abc token:num:a=1 token:num:b=2 token:num:c=3 token:desc=...

是否可以将该行编辑为

1 abc 1 2 3 ....

在实际 Solr 索引之前?

我认为 Solr 中没有任何魔法可以找出您缺少的特定字段。当然,UpdateCSV API 中没有描述这种魔法。从 Solr 的角度来看,它只能推断出某些字段不存在并抛出长度不匹配的错误。因此,就像您的情况一样,您只缺少字段 4 或 5,这无论如何都行不通。你是唯一知道哪些字段数据丢失逻辑的人。

因此,最适合您的方法是按照您在问题中提到的那样进行预处理。您可以在使用 Solrs CSV 索引器为它们编制索引之前修复这些文件,或者使用索引脚本在提交到 Solr 之前即时修复这些行。两种方法都同样有效。

添加评论和编辑的问题:

Solr 确实提供了一个 DataImportHandler 可用于对输入数据进行预处理。有关其功能的文档,请参阅 https://wiki.apache.org/solr/DataImportHandler。但是,虽然它非常灵活并且包含数字格式解析等功能,但我相信使用 DIH 不可能准确地实现您所描述的内容。

我看到了两种预处理数据以适合您的用例的方法:

  1. 添加占位符值或用额外的制表符填充缺失值的行,然后导入 TSV。 Solr 中生成的文档是可预测的,其中 "missing value" 始终相同。

  2. 将 TSV 转换为另一种格式,例如 JSON,您可以从预处理文档中删除没有值的键。