我试图索引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索引之前呢?
答案 0 :(得分:0)
我认为Solr中没有任何魔法来确定你缺少哪些特定领域。当然,UpdateCSV API中没有描述魔术。从Solr的角度来看,它可以推断的是,某些字段不在那里并且抛出长度不匹配的错误。因此,在您的情况下,您只缺少4或5字段,但无论如何都无法工作。您是唯一能够了解缺少哪些字段数据的逻辑的人。
因此,对您而言,最好的方法是按照您在问题中提到的那样进行预处理。您可以在使用Solrs CSV索引器索引文件之前修复文件,也可以使用索引脚本在提交到Solr之前动态修复这些行。这两种方法都能很好地发挥作用。
添加评论和编辑问题:
Solr确实提供了一个DataImportHandler,可用于预处理输入数据。有关其功能的文档,请参阅https://wiki.apache.org/solr/DataImportHandler。然而,虽然它非常灵活并且包含诸如数字格式解析之类的功能,但我相信不可能完全实现您使用DIH描述的内容。
我看到两种方法来预处理数据以适合您的用例:
添加占位符值或使用额外选项卡填充缺失值的行,然后导入TSV。 Solr中生成的文档是可预测的,其中“缺失值”始终相同。
将TSV转换为另一种格式,例如JSON,您可以在没有预处理文档的值的情况下删除密钥。