Solr 4.0 Delta-import 3 таблицы объединения

Я использую Solr 4.0 DIH(разъем JDBC) на Ubuntu. Я пытаюсь заставить следующий запрос MySQL JOIN работать с Solr на Delta-import:

select c.*,u.*,g.* from user u inner join group g on u.bus_grp_id = g.dt_grp_id inner join customer c on c.id = g.dt_id

Здесь c, u, g - псевдонимы таблиц. customer, user а также group соответственно.

Ниже data-config.xml файл для полного и дельта импорта:

<entity name="cust" pk="id" query="select c.*,u.*,g.* from user u inner join group g on u.bus_grp_id = g.dt_grp_id inner join customer c on c.id = g.dt_id"
                deltaImportQuery="select c.*,u.*,g.* from user u inner join group g on u.bus_grp_id = g.dt_grp_id inner join customer c on c.id = g.dt_id where c.id='${dih.delta.c.id}'"
                deltaQuery="select id from customer where last_modified &gt; '${dih.last_index_time}'">

                <entity name="grp" pk="dt_id"
                    query="select * from group where dt_id='${cust.c.id}'"
                    deltaQuery="select dt_id from group where last_modified > '${dih.last_index_time}'"
                    parentDeltaQuery="select id from customer where id=${grp.dt_id}" >

                <entity name="usr" pk="bus_grp_id"
                query="select * from user"
                deltaQuery="select bus_grp_id from user where last_modified > '${dih.last_index_time}'"
                parentDeltaQuery="select dt_grp_id from group where dt_grp_id=${usr.bus_grp_id}" >

</entity>
</entity>
</entity>

full-import хорошо но Delta-import не работает (я не получаю результатов после дельта-импорта). Прошло почти месяц с тех пор, как я пытался сделать эту работу, но не смог.

Любая помощь? пожалуйста!

1 ответ

Если запрос в вашем основном элементе сущности т.е.

select c.*,u.*,g.* from user u 
inner join group g on u.bus_grp_id = g.dt_grp_id 
inner join customer c on c.id = g.dt_id

дает вам все поля, которые нужно проиндексировать в Solr, я не думаю, что вам нужны другие две суб-сущности. Также я предполагаю, что в вашем deltaImportQuery есть опечатка. Вы должны использовать dih.delta.id и не dih.delta.c.id,

Я думаю, если вы сохраните только это, оно должно работать нормально:

<entity 
   name="cust" 
   pk="id" 
   query="select c.*,u.*,g.* from user u 
            inner join group g on u.bus_grp_id = g.dt_grp_id 
            inner join customer c on c.id = g.dt_id"
   deltaImportQuery="select c.*,u.*,g.* from user u 
            inner join group g on u.bus_grp_id = g.dt_grp_id 
            inner join customer c on c.id = g.dt_id 
              where c.id='${dih.delta.id}'"
   deltaQuery="select id from customer 
                where last_modified &gt; '${dih.last_index_time}'" />

Как только вы выполните полный импорт, проверьте файл dataimport.properties. После завершения полного импорта убедитесь, что вы получили несколько документов в customer стол с last_modified больше, чем время, которое вы найдете в dataimport.properties, поэтому у delta есть данные для запуска. Затем попробуйте delta import и посмотрите, будут ли эти документы повторно проиндексированы. Вы можете узнать, сколько было проиндексировано с помощью дельта-импорта, посмотрев на http://HOST:PORT/solr/CORE/dataimport

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