来自父实体的 Solr 变量未在子实体中设置
Solr variable from parent entity not set in child entity
我遇到了一个非常奇怪的问题。这是我的情况。我的文档由 2 个实体组成,每个实体来自不同的数据库。下面是我的 bd-data-config.xml 的一部分(出于安全目的,一些代码已经 modified/stripped)
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
当我执行导入时,它 运行 正常。在 Web Admin 界面和日志中都没有报告错误,尽管这很奇怪。 process_postgresql 的主题被编入索引,而 process_oracle 的主题没有。这是一小部分输出查询。
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"_":"1583958908786"}},
"response":{"numFound":7,"start":0,"docs":[
{
"process_id":"oracle-1"
},
...
{
"process_id":"postgresql-12",
"subject":["subject1", "subject2"]
}
}
}
如您所见,postgresql 的主题已被索引,而oracle 的主题则没有。
当我检查日志时(运行 在调试模式下)我注意到了这一点:
2020-03-13 11:52:47.085 DEBUG (Thread-33) [ ] o.a.s.h.d.JdbcDataSource Executing SQL: select distinct sub.subject from tb_subject sub , tb_process_subject prc_sub 其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process =
...
2020-03-13 11:52:47.953 DEBUG (Thread-33) [ ] o.a.s.h.d.JdbcDataSource Executing SQL: select distinct sub.subject from tb_subject sub , tb_process_subject prc_sub 其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process = 12
如您所见,问题是变量${process_oracle.process_id}没有设置,同时变量${process_postgresql.process_id} 运行没问题。
有人知道为什么会这样吗?
此致
几天后,我解决了这个问题。变量必须大写。所以它一定是这样的:
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
就是这样。就这么简单。
我遇到了一个非常奇怪的问题。这是我的情况。我的文档由 2 个实体组成,每个实体来自不同的数据库。下面是我的 bd-data-config.xml 的一部分(出于安全目的,一些代码已经 modified/stripped)
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.process_id}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
当我执行导入时,它 运行 正常。在 Web Admin 界面和日志中都没有报告错误,尽管这很奇怪。 process_postgresql 的主题被编入索引,而 process_oracle 的主题没有。这是一小部分输出查询。
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*",
"_":"1583958908786"}},
"response":{"numFound":7,"start":0,"docs":[
{
"process_id":"oracle-1"
},
...
{
"process_id":"postgresql-12",
"subject":["subject1", "subject2"]
}
}
}
如您所见,postgresql 的主题已被索引,而oracle 的主题则没有。 当我检查日志时(运行 在调试模式下)我注意到了这一点:
2020-03-13 11:52:47.085 DEBUG (Thread-33) [ ] o.a.s.h.d.JdbcDataSource Executing SQL: select distinct sub.subject from tb_subject sub , tb_process_subject prc_sub 其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process = ... 2020-03-13 11:52:47.953 DEBUG (Thread-33) [ ] o.a.s.h.d.JdbcDataSource Executing SQL: select distinct sub.subject from tb_subject sub , tb_process_subject prc_sub 其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process = 12
如您所见,问题是变量${process_oracle.process_id}没有设置,同时变量${process_postgresql.process_id} 运行没问题。
有人知道为什么会这样吗?
此致
几天后,我解决了这个问题。变量必须大写。所以它一定是这样的:
<document>
<entity name="process_oracle" datasource="oracle" query="
select 'oracle-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="oracle" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_oracle.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
<entity name="process_postgresql" datasource="postgresql" query="
select 'postgresql-' || p.process_id as id, p.process_id from tb_process p">
<field column="process_id" name="process_id"/>
<entity name="subject" datasource="postgresql" query="
select distinct sub.subject
from tb_subject sub, tb_process_subject prc_sub
where sub.id_subject = prc_sub.id_subject
and prc_sub.id_process = ${process_postgresql.PROCESS_ID}">
<field column="subject" name="subject"/>
</entity>
</entity>
</document>
就是这样。就这么简单。