WedX - журнал о программировании и компьютерных науках

Индексирование вложенных данных с помощью Solr

Я пытаюсь индексировать вложенные данные с помощью solr из существующей базы данных sql. БД имеет следующую структуру: https://dev.mysql.com/doc/employee/en/images/employees-schema.png

Мой db-schema.xml выглядит следующим образом:

<document>
    <entity name="employees"
            rootEntity="true"
            query="select emp_no as 'id', first_name, last_name from employees limit 10;">
        <field column="id" />
        <field column="first_name" />
        <field column="last_name" />
        <entity child="true"
                name="dept_emp"
                query="select emp_no, dept_no from dept_emp where dept_emp.emp_no=${employees.id}">
            <field column="dept_no" name='dept_no'/>
        </entity>
    </entity>
  </document>

и моя управляемая-схема.xml для solr такова:

    <field name="first_name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="last_name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="dept_no" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

Проблема в том, что я получаю эту ошибку:

org.apache.solr.common.SolrException: [doc=null] missing required field: dept_no

Даже если я удалю

<field name="dept_no" type="string" indexed="true" stored="true" required="true" multiValued="false" />

Я получаю сообщение об ошибке: last_name отсутствует. Если я удаляю вложенный объект, все работает нормально. Любая идея, почему это происходит?

20.10.2017

Ответы:


1

это происходит потому, что факт обязательного поля применяется ТАКЖЕ к родительским документам. Таким образом, ваши родительские документы также должны иметь эти поля, даже если они имеют смысл только для детей.

Та же проблема появится с полем "id"... Просто удалите требуемый атрибут.

Редактировать: чтобы сохранить требуемый атрибут, добавьте это (только для показанного здесь dept_no, сделайте то же самое для остальных):

<entity name="employees"
        rootEntity="true"
        query="select emp_no as 'id', first_name, last_name, 'DUMMY' as dept_no from employees limit 10;">
    <field column="id" />
20.10.2017
  • Спасибо, это так работает, но есть ли способ добавить некоторые поля по мере необходимости, чтобы я мог видеть, что с данными что-то не так? 23.10.2017
  • И есть ли лучший подход для индексации реляционных данных из существующей базы данных? 23.10.2017
  • вы можете сохранить «обязательный» атрибут, если вы передаете значение (фиктивное значение) в дочерние элементы, например. Что касается «лучшего» способа... как всегда, это зависит от вас, вы, конечно, можете реализовать некоторый код (используя Sorlj, если в java) для индексации БД, это гораздо более гибко, но это также больше работы 23.10.2017
  • И как передать фиктивное поле, просто добавив ‹поле› с именем столбца, таким же, как у родителя? 23.10.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]