В чем разница между запросом на соединение и встроенными объектами в Solr DIH?

Я пытаюсь индексировать данные по нескольким таблицам с помощью Solr Data Import Handler. Официальная вики в DIH предлагает использовать встроенные сущности для связи нескольких таблиц, например:

<document>
    <entity name="item" pk="id" query="SELECT * FROM item">
        <entity name="member" pk="memberid" query="SELECT * FROM member WHERE memberid='${item.memberid}'>
        </entity>
    </entity>
</document>

Еще один способ, который работает:

<document>
    <entity name="item" pk="id" query="SELECT * FROM item INNER JOIN member ON item.memberid=member.memberid">
    </entity>
</document>

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

Другой вариант заключается в том, что при использовании таблиц соединений в MySQL использование метода запросов SQL с несколькими объединениями может привести к индексации нескольких документов вместо одного.

2 ответа

Решение

Несколько вещей, с которыми я столкнулся:-

  • Если у вас есть сопоставление один к одному, вы можете использовать соединение, чтобы получить все поля одним запросом.
  • Если у вас есть несколько записей для корня, вы можете использовать дочернюю сущность, которая, вероятно, создаст многозначное поле.
  • Подсубъекты запускают запрос для каждой из записей и, следовательно, работают медленнее.

Хотелось бы услышать и от других пользователей.

Если вы хотите оптимизировать производительность, вы можете использовать второй выбор, чтобы создать материализованное представление. Это означает, что вы можете импортировать с помощью DIH непосредственно из материализованного представления (без создания каких-либо внутренних соединений или элементов в DIH, ведьма будет означать намного более быстрый импорт, и исходная БД не будет "перегрета"). Если вы хотите, вы можете создать cronjob быстро обновлять свой материализованный вид каждый день или по мере необходимости. Если вы используете MySQL, вы можете посмотреть здесь подробности материализации представлений. Надеюсь, что это поможет.

Другие вопросы по тегам