我试图使用DIH来加载我们的SOLR数据。
我已经在其他SOLR核心安装上做了这个工作,没有问题,但是由于某些原因,我不能在这个安装上工作。
主数据(媒体--主要是视频)(来自主DIH查询)加载得很好。次级查询(一个嵌套的实体)应该加载视频标签的一对多记录,但没有在SOLR中填充多值字段。我没有看到任何错误信息(至少我在日志或其他任何地方都找不到),所以我不确定哪里出了问题。
我想知道的一件事是,"连接"(嵌套查询中的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>
在managed-schema文件中的多值项目是按照以下方式配置的。
<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字段。相反,我使用的是视频ID字段。同样,我不确定这在这里是否重要。 当我在SQL中运行查询时,我得到了适当的数据。
如果有人对我如何调试二级查询有任何建议,或者更好的是,如果有人在我的配置中看到我做错了什么,我会感谢你的反馈。
谢谢
比尔
所以最后发现是大小写敏感性的问题。来自SQL查询的字段与DIH字段名中配置的大小写不完全匹配(videoID与videoId)。 虽然这对主查询没有影响,而且数据也被导入到那里,但对第二个嵌套实体却有影响。
调试的效果一直不好,但在SQL服务器上调试实际运行的查询,对看到发生了什么很有帮助。