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

rob*_*rod 3 solr dataimporthandler

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

目前,我的配置会生成如下 Solr 文档:

{
    "x": "value",
    "y": "",
    "z": 2
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "x": "value",
    "z": 2
}
Run Code Online (Sandbox Code Playgroud)

我可以在配置文件中为 DataImportHandler 定义一些东西来给我想要的结果吗?

Ale*_*tch 5

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>
Run Code Online (Sandbox Code Playgroud)

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

<requestHandler name="/dataimport" class="solr.DataImportHandler">
  <lst name="defaults">
    ....
    <str name="update.chain">skip-empty</str>
  </lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)

您可以在http://solr-start.com 上查看UpdateRequestProcessors 的完整列表