首页 > 解决方案 > 来自父实体的 Solr 变量未在子实体中设置

问题描述

我面临一个非常奇怪的问题。这是我的情况。我的文档由 2 个实体组成,每个实体来自不同的数据库。以下是我的 bd-data-config.xml 的一部分(出于安全目的,一些代码已被修改/删除)

<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) [] oashdJdbcDataSource 执行 SQL:从 tb_subject sub、tb_process_subject prc_sub 中选择不同的 sub.subject,其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process =
...
2020-03-13 11:52:47.953 DEBUG (Thread-33) [] oashdJdbcDataSource 执行 SQL:从 tb_subject sub、tb_process_subject prc_sub 中选择不同的 sub.subject,其中 sub.id_subject = prc_sub.id_subject 和 prc_sub.id_process = 12

如您所见,问题在于变量 ${process_oracle.process_id} 未设置,同时变量 ${process_postgresql.process_id} 运行良好。

有谁知道为什么会这样?

此致

标签: solrparent-childblock

解决方案


几天后,我可以解决问题。变量必须大写。所以它必须看起来像这样:

<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>

而已。就如此容易。


推荐阅读