SOLR 7 DataImportHandler – 无法将数据放入多值字段(通过 "Joined" table)
SOLR 7 DataImportHandler – Unable to get data into multivalued fields (via "Joined" table)
我正在尝试使用 DIH 加载我们的 SOLR 数据。
我在其他 SOLR cores/installations 上完成此操作没有问题,但由于某种原因我无法在这个安装上运行它。
主要数据(媒体 - 主要是视频)(来自主要 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.
中的查询时,我得到了正确的数据
如果有人对我如何调试辅助查询的情况有任何建议,或者更好的是,如果有人在我的配置中看到我做错了什么,我将感谢您的反馈。
谢谢!
比尔
所以最后证明是区分大小写的问题。
来自 SQL 查询的字段与 DIH 字段名称(videoID 与 videoId)中配置的大小写不完全匹配。虽然这对主查询无关紧要,并且数据是在那里导入的,但对第二个嵌套实体来说却很重要。
调试从来没有很好地进行过,但是调试 运行 在 SQL 服务器上的实际查询有助于了解发生了什么。
我正在尝试使用 DIH 加载我们的 SOLR 数据。
我在其他 SOLR cores/installations 上完成此操作没有问题,但由于某种原因我无法在这个安装上运行它。
主要数据(媒体 - 主要是视频)(来自主要 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.
中的查询时,我得到了正确的数据如果有人对我如何调试辅助查询的情况有任何建议,或者更好的是,如果有人在我的配置中看到我做错了什么,我将感谢您的反馈。
谢谢!
比尔
所以最后证明是区分大小写的问题。 来自 SQL 查询的字段与 DIH 字段名称(videoID 与 videoId)中配置的大小写不完全匹配。虽然这对主查询无关紧要,并且数据是在那里导入的,但对第二个嵌套实体来说却很重要。
调试从来没有很好地进行过,但是调试 运行 在 SQL 服务器上的实际查询有助于了解发生了什么。