solr delta import не работает. строки дельты извлекаются, но не обрабатываются - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь импортировать данные из SqlServer в Solr 8.5.0. Полный импорт работает нормально. но импорт дельты не работает нормально. Когда я выполняю дельта-импорт, я получаю результат ниже.

Запросы: 3, Получено: 1, Пропущено: 0, Обработано: 0

почему данные не обрабатываются, даже если они получены?

Файл DataConfig выглядит следующим образом:

<dataConfig>
    <!--<script><![CDATA[
    id = 1;
    function GenerateId(row) {
        row.put('id', (id ++).toFixed());
        return row;
    }
   ]]></script> -->
    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://172.29.58.139;databaseName=Legal1_TestNew" user="sa"  password="Microsoft#1234"/>
    <script><![CDATA[
    function SplitDynamicColumn(row) {
          var splitBy = '####'
          var columns = row.keySet().toArray();
          for (var c = 0; c < columns.length; c++) {
            var columnName = columns[c];
            var value = row.get(columnName);
            /*if(columnName == 'doc_name_s'){
                var docType = value.split('_')[0];
                row.put('doc_type_s',docType);
            }*/
               if (value !== null) {
                 var arr = new java.util.ArrayList();
                 var sp = value.split(splitBy);
                 for (var i = 0; i < sp.length; i++) {
                    if(columnName!= null && columnName!= '' && (columnName.indexOf('_dt') != -1) && sp[i]!=null && sp[i]!='' ){
                            sp[i] = parseDateToISO(sp[i]);
                    }
                   arr.add(sp[i]);
                 }
                 row.put(columnName, arr);
               }
            row.put('copy_'+columnName, value);
        }
      return row;
    }

    function parseDateToISO (date){
        var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();
        if (month.length < 2) 
            month = '0' + month;
        if (day.length < 2) 
            day = '0' + day;
        return ([year, month, day].join('-'))+'T00:00:00Z';
    }
  ]]></script>
    <document>
        <entity name="Contract"
            pk="doc_name_s"
            transformer="script:SplitDynamicColumn"
            query ="select * from Cm_Solr_Temp_Final"
            deletedPkQuery="SELECT doc_name_s FROM Cm_Solr_Temp_Final WHERE Active_s='0' AND CAST(Last_Updated_Date_s as datetime2(0)) >= CAST('${dih.last_index_time}' as datetime2(0))"
            deltaQuery="SELECT doc_name_s FROM Cm_Solr_Temp_Final WHERE Active_s = '1' AND CAST(Last_Updated_Date_s as datetime2(0)) >= CAST('${dih.last_index_time}' as datetime2(0))"
            deltaImportQuery="SELECT * FROM Cm_Solr_Temp_Final WHERE doc_name_s='${dih.delta.doc_name_s}'"
            >
        </entity>
        <entity name="RealEstate"
            transformer="script:SplitDynamicColumn"
            query ="select * from re_temp_final">
        </entity>
        <entity name="IPR"
            transformer="script:SplitDynamicColumn"
            query ="select * from Ip_Solr_Temp_Final">
        </entity>
        <entity name="Litigation"
            transformer="script:SplitDynamicColumn"
            query ="select * from Lm_Solr_Temp_Final">
        </entity>
        <entity name="Regulatory"
            transformer="script:SplitDynamicColumn"
            query ="select * from Rg_Solr_Temp_Final">
        </entity>
    </document>
</dataConfig>

Прямо сейчас я импортирую только объект «Контракт». Я проверил журналы, и вот мой фактический deltaImportQuery, напечатанный в журналах

SELECT * FROM Cm_Solr_Temp_Final WHERE doc_name_s='[BTA_4054]'

после просмотра вышеуказанного запроса, я знаю, что реальная проблема связана с скобкой «[BTA_4054]» вокруг значения «BTA_4054». но я не мог понять, как применяется этот кронштейн. Я проверил базу данных, и значение в моей базе данных - «BTA_4054».

Кто угодно Пожалуйста, если можете.

...