Solr索引tsv文件,其中一些字段丢失

时间:2015-05-12 19:24:45

标签: solr

我试图索引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 

标题将是这样的

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索引之前呢?

1 个答案:

答案 0 :(得分:0)

我认为Solr中没有任何魔法来确定你缺少哪些特定领域。当然,UpdateCSV API中没有描述魔术。从Solr的角度来看,它可以推断的是,某些字段不在那里并且抛出长度不匹配的错误。因此,在您的情况下,您只缺少4或5字段,但无论如何都无法工作。您是唯一能够了解缺少哪些字段数据的逻辑的人。

因此,对您而言,最好的方法是按照您在问题中提到的那样进行预处理。您可以在使用Solrs CSV索引器索引文件之前修复文件,也可以使用索引脚本在提交到Solr之前动态修复这些行。这两种方法都能很好地发挥作用。

添加评论和编辑问题:

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

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

  1. 添加占位符值或使用额外选项卡填充缺失值的行,然后导入TSV。 Solr中生成的文档是可预测的,其中“缺失值”始终相同。

  2. 将TSV转换为另一种格式,例如JSON,您可以在没有预处理文档的值的情况下删除密钥。