Переменная Solr из родительского объекта не установлена ​​в дочернем объекте - PullRequest
0 голосов
/ 13 марта 2020

У меня очень странная проблема. Вот мой случай. Мои документы состоят из 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, ни в журнале, хотя и странная вещь. В то время как субъекты процесса_ postgresql проиндексированы, субъекты процесса_ 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 where sub.id_subject = prc_sub.id_subject and 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  where sub.id_subject = prc_sub.id_subject and prc_sub.id_process = 12

Как видите, проблема в том, что переменная $ {process_ oracle .process_id} не установлена переменная $ {process_ postgresql .process_id} работает нормально.

Кто-нибудь знает, почему это происходит?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 05 апреля 2020

Через несколько дней я смог решить проблему. Переменная должна быть в верхнем регистре. Так должно выглядеть вот так:

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

Вот и все. Так просто.

...