是否有可能让Solr的DataImportHadler忽略空字符串的字段?

时间:2014-07-04 09:04:33

标签: solr dataimporthandler

我正在使用Solr的DataImportHandler从数据库导入数据。如果该列没有值,则某些记录具有空字符串。

目前,我的配置生成了这样的Solr文档:

{
    "x": "value",
    "y": "",
    "z": 2
}

但是我想忽略所有没有值的字段,以便创建这样的文档:

{
    "x": "value",
    "z": 2
}

我可以在DataImportHandler的配置文件中定义哪些内容可以提供我想要的结果吗?

2 个答案:

答案 0 :(得分:4)

Solr的一个很少实现的方面是你可以插入UpdateRequestProcessor以在> DIH之后运行。并且,专门针对此问题的专用URP。

所以你可以这样做:

<updateRequestProcessorChain name="skip-empty">
    <!--  Next two processors affect all fields - default configuration -->
    <processor class="TrimFieldUpdateProcessorFactory" /> <!--  Get rid of leading/trailing spaces. Also empties all-spaces fields for next filter-->
    <processor class="RemoveBlankFieldUpdateProcessorFactory" /> <!--  Delete fields with no content. More efficient and allows to query for presence/absence of field -->

    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

显然,请记住在DIH的处理程序定义中引用此链:

<requestHandler name="/dataimport" class="solr.DataImportHandler">
  <lst name="defaults">
    ....
    <str name="update.chain">skip-empty</str>
  </lst>
</requestHandler>

您可以在the full list of the UpdateRequestProcessors

看到http://solr-start.com

答案 1 :(得分:1)

您可以像我在上面的评论中建议的那样在SQL中执行此操作,或者如果您想在DIH处理器链中使用解决方案,则可以使用ScriptTransformer。 ScriptTransformer将允许您编写一个小Javascript来检查是否有任何列是空字符串,并使用row.remove(fieldname)来完全删除该字段。

如果你想用纯Java编写它,你也可以create a reusable custom transformer for DIH