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