【问题标题】:SOLR 7 DataImportHandler – Unable to get data into multivalued fields (via "Joined" table)SOLR 7 DataImportHandler – 无法将数据放入多值字段(通过“加入”表)
【发布时间】:2020-04-20 15:43:30
【问题描述】:

我正在尝试使用 DIH 加载我们的 SOLR 数据。

我已经在其他 SOLR 内核/安装上顺利完成了此操作,但由于某种原因,我无法在此安装上运行。

主要数据(媒体 - 主要是视频)(来自主要 DIH 查询)加载得很好。应该为视频标签加载一对多记录的辅助查询(嵌套实体)不会填充 SOLR 中的多值字段。 我没有看到任何错误消息(至少在日志或其他任何地方都没有),所以我不确定哪里出错了。

我想知道的一件事是“join”(嵌套查询中的 where 子句)不使用主键字段 - 但我认为这无关紧要。如果我在这里错了,请纠正我。

这是 DIH 配置的简化副本:

<dataConfig>
    <dataSource type="JdbcDataSource"
            driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://x.x.x.x;databaseName=media;"
            user="xxx"
            password="xxx"
            batchSize="100" />

    <document name="mediaContent">
        <entity name="media" query="SELECT * FROM mediaContent" pk="mediaID">
          <field column="mediaID" name="mediaID" />
          <field column="mediaType" name="mediaType" />
          <field column="videoID" name="videoID" />
          <field column="videoTitle" name="videoTitle" />
          <field column="videoDescription" name="videoDescription" />
          <field column="videoStatusID" name="videoStatusID" />
          <field column="videoPublished" name="videoPublished" />

          <entity name="videoTags"
            query="
                SELECT tagID, tagTitle
                FROM videoTags
                WHERE videoID = '${mediaContent.videoID}'">
            <field column="tagID" name="videoTagIDs" />
            <field column="tagTitle" name="videoTagTitles" />
          </entity>
        </entity>
    </document>
</dataConfig>

托管模式文件中的多值项配置如下:

<field name="videoTagIDs" type="int" indexed="true" stored="true" required="false" multiValued="true" />
<field name="videoTagTitles" type="text" indexed="true" stored="true" required="false" multiValued="true" />

通常我会在第二次查询中使用主键加入数据,但是在这种情况下,因为不是所有的内容都是视频,并且标签只与视频内容相关,所以我没有使用PK字段.相反,我使用的是 videoID 字段。同样,我不确定这在这里是否重要。当我在 SQL 中运行查询时,我得到了正确的数据。

如果有人对我如何调试辅助查询发生的事情有任何建议,或者更好的是,如果有人在我的配置中看到我做错的事情,我会很感激你的反馈。

谢谢!

比尔

【问题讨论】:

  • 您是否尝试过the debug mode in the DIH handlerthe LogTransformer 来检查每个步骤中发生的情况?
  • 谢谢@MatsLindh 不知道 DIH 的调试模式。会试一试。非常感谢。
  • 对此的更新...我在 SOLR DIH UI 中看到了“调试”复选框,我曾尝试过,但它只运行了 10 条记录而不是全部记录。我意识到 UI 忽略了默认的 10 条记录字段,直到单击调试字段,所以在调试模式下我必须指定一个更大的数字。我现在得到了全套导入,但调试输出只是表明“忙……命令仍在运行”。我似乎无法让它产生任何有用的调试信息。日志文件显示:o.a.s.s.HttpSolrCall 无法写入响应,客户端关闭连接或我们正在关闭

标签: solr dataimporthandler


【解决方案1】:

所以最终证明这是区分大小写的错误。 来自 SQL 查询的字段与 DIH 字段名称(videoID 与 videoId)中配置的大小写不完全匹配。虽然这对于主查询无关紧要,并且数据是在那里导入的,但对于第二个嵌套实体来说确实很重要。

调试从来没有很好地工作,但调试实际在 SQL Server 上运行的查询有助于了解发生了什么。

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多