在Solr数据导入处理程序中定义嵌套实体
让我先说一下,我已经看过了关于这个主题的所有我能找到的东西,包括Solr文档和所有的SO问题 我有一个Solr实例,我用一个数据导入Hanlder设置它,使用JDBC驱动程序从MSSQL中提取数据。数据进来了,但它的结构并不像我期望的那样基于Solr-DIH文档在Solr数据导入处理程序中定义嵌套实体,solr,Solr,让我先说一下,我已经看过了关于这个主题的所有我能找到的东西,包括Solr文档和所有的SO问题 我有一个Solr实例,我用一个数据导入Hanlder设置它,使用JDBC驱动程序从MSSQL中提取数据。数据进来了,但它的结构并不像我期望的那样基于Solr-DIH文档 <document> <entity> <entity /> </entity> </document> 当我在寻找 docs [ { recordId: '12
<document>
<entity>
<entity />
</entity>
</document>
当我在寻找
docs [
{
recordId: '1234',
name: 'whatever'
subrows: [{
col1: 'x',
col2: 'a'
},
{
col1: 'y',
col2: 'b'
},
{
col1: 'z',
col2: 'c'
}]
} ]
我见过“块连接”的东西,但我不知道它去了哪里。我补充说
<add>
<doc>
<field />
<doc>
<field />
</doc>
<doc>
</add>
到DIH请求处理程序,但它什么也没做。我将其添加到/update requestHandler中,得到了一个错误。我不知道那应该去哪里。它是否仅在查询期间有效,还是仅在通过/update将数据推送到solr时有效
在哪里定义文档的结构?我尝试了模式中的嵌套字段、DIH配置中的实体以及RequestHandler中的块连接。还没有任何效果
很明显我错过了什么 DIH不生成嵌套文档。Solr支持它们,但DIH还不能生成它们 DIH中的嵌套实体能够合并源,并且能够基于来自不同源的迭代创建实体。例如,如果外部实体读取文件名,而内部实体从这些文件加载内容,每个文件都有自己的记录
您现在可能想将嵌套的目标代码移动到使用SolrJ的客户端。从Solr 5.1开始,最终支持在DIH中索引嵌套文档 只需将
child=true
添加到子实体中,Solr DIH就会自动将索引作为子文档
来自JIRA的示例(在上面的链接中):
注意,如果设置了
child=“true”
,则如果epw.getEntity().isChild()将返回true,因此,它正在创建一个新的DocWrapper
并添加为子文档,而不是简单地将实体添加为一组新字段。是否可以将格式化文档推送到Solr并以相同的方式存储它?您可以将嵌套的格式化文档推送到Solr,但它们需要采用Solr理解的格式:。您可能还对Solr的SIREn附加组件感兴趣:
<add>
<doc>
<field />
<doc>
<field />
</doc>
<doc>
</add>
<document>
<entity name='PARENT' query='select * from PARENT'>
<field column='id' />
<field column='desc' />
<field column='type_s' />
<entity child='true' name='CHILD' query="select * from CHILD where parent_id='${PARENT.id}'">
<field column='id' />
<field column='desc' />
<field column='type_s' />
</entity>
</entity>
</document>
if (doc != null) {
if (epw.getEntity().isChild())
{
childDoc = new DocWrapper();
handleSpecialCommands(arow, childDoc);
addFields(epw.getEntity(), childDoc, arow, vr);
doc.addChildDocument(childDoc);
}
else
{
handleSpecialCommands(arow, doc);
addFields(epw.getEntity(), doc, arow, vr);
}
}