Сопоставление сущностей «один ко многим» в SOLR - PullRequest
6 голосов
/ 17 ноября 2010

Я пытаюсь отобразить несколько сущностей из существующей базы данных в SOLR.

Таблицы:

Отель: hotel_id hotel_name

HotelToCategory: hotel_id category_id ставка

Категория: category_id название значение

Как я могу использовать DataImportHandler для создания таких документов:

{
    hotel_name: 'name',
    hotel_id: 1,
    categories: [
       { category_name: 'cname',
         value: 'val',
         rate: 3,
       }
    ]
}

Любая помощь будет принята с благодарностью!

1 Ответ

6 голосов
/ 18 ноября 2010

Отношения индексируются с использованием сложенных объектов в DIH. Загляните на страницу DIH в вики Solr.

Есть также несколько основных примеров этого, включенных в дистрибутивы Solr, смотрите в examples / example-DIH.

Однако здесь есть ограничение: solr (в настоящее время) не поддерживает отношения между индексными документами, поэтому вам придется найти обходной путь для индексации этого. Например, просто сохраняя отображаемые данные в неиндексированном поле (что может потребовать очень частого переиндексации):

<document>
    <entity name="hotel" query="select * from hotel">
        <field column="id" name="hotel_id" />
        <field column="hotel_name" name="hotel_name" />
        <entity name="hotel_category_display"
                query="SELECT STATEMENT THAT RETURNS JSON REPRESENTATION">
            <field column="category" name="category" />
        </entity>
</document>

Или путем сохранения только идентификатора категории и выполнения поиска (либо по базе данных, либо по индексу категорий по отдельности и поиску по Solr) в момент поиска:

<entity name="hotel_category_display"
        query="SELECT STATEMENT THAT RETURNS JSON REPRESENTATION">
    <field column="category" name="category" />
</entity>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...