SOLR 7 DataImportHandler - Невозможно получить данные в многозначные поля (через таблицу "Joined") - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь использовать DIH для загрузки наших данных SOLR.

Я сделал это на других ядрах / установках SOLR без проблем, но по какой-то причине я не могу заставить его работать в этой установке .

Основные данные (медиа - в основном видео) (из основного запроса DIH) загружаются просто отлично. Вторичный запрос (вложенный объект), который должен загружать записи «один ко многим» для тегов видео, не заполняет многозначные поля в SOLR. Я не вижу сообщений об ошибках (по крайней мере, не могу найти их в журналах или где-либо еще), поэтому я не уверен, в чем дело.

Единственное, что меня интересует, это то, что «join» (предложение where во вложенном запросе) не использует поле первичного ключа - но я не думаю, что это должно иметь значение. Пожалуйста, исправьте меня, если я ошибаюсь.

Вот упрощенная копия конфигурации DIH:

<dataConfig>
    <dataSource type="JdbcDataSource"
            driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://x.x.x.x;databaseName=media;"
            user="xxx"
            password="xxx"
            batchSize="100" />

    <document name="mediaContent">
        <entity name="media" query="SELECT * FROM mediaContent" pk="mediaID">
          <field column="mediaID" name="mediaID" />
          <field column="mediaType" name="mediaType" />
          <field column="videoID" name="videoID" />
          <field column="videoTitle" name="videoTitle" />
          <field column="videoDescription" name="videoDescription" />
          <field column="videoStatusID" name="videoStatusID" />
          <field column="videoPublished" name="videoPublished" />

          <entity name="videoTags"
            query="
                SELECT tagID, tagTitle
                FROM videoTags
                WHERE videoID = '${mediaContent.videoID}'">
            <field column="tagID" name="videoTagIDs" />
            <field column="tagTitle" name="videoTagTitles" />
          </entity>
        </entity>
    </document>
</dataConfig>

Многозначные элементы в файле управляемой схемы настроены согласно:

<field name="videoTagIDs" type="int" indexed="true" stored="true" required="false" multiValued="true" />
<field name="videoTagTitles" type="text" indexed="true" stored="true" required="false" multiValued="true" />

Обычно я бы использовал первичный ключ для объединения данных во втором запросе, но в этом случае, поскольку не весь контент является видео, а теги связаны только с видеоконтентом, я не являюсь используя поле PK. Вместо этого я использую поле videoID. Опять же, я не уверен, имеет ли это значение здесь или нет. Я получаю правильные данные, когда запускаю запросы в SQL.

Если у кого-то есть какие-либо предложения относительно того, как я могу отладить то, что происходит со вторичным запросом, или еще лучше, если кто-то видит что-то в моей конфигурации что я сделал не так, буду признателен за ваш отзыв.

Спасибо!

Билл

1 Ответ

0 голосов
/ 05 мая 2020

Таким образом, в итоге это стало ошибкой чувствительности к регистру. Поля, поступающие из запроса SQL, не совсем совпадают с регистром, заданным в именах полей DIH (videoID vs videoId). Хотя это не имело значения для основного запроса, и данные были импортированы туда, это имело значение для второй вложенной сущности.

Отладка никогда не работала хорошо, но отладка запросов, фактически выполняемых на сервере SQL было полезно увидеть, что происходит.

...