2015-10-02 4 views
0

У меня есть две таблицы: tableA и tableB. Между этими таблицами существует взаимосвязь. Одна строка в таблице А соответствует нескольким строкам в таблице Б. У меня есть запрос:Apache Solr - данные индекса

select aa.id, aa.first_name, aa.last_name, bb.address_home, bb.address_coresp from testA aa, testB bb where aa.id = bb.testA_fk; 

, которая возвращает количество строк - 3, например:

1 John Terry HOME 1  CORESP_1 
1 John Terry HOME 11  CORESP_11 
1 John Terry HOME 111 CORESP_111 

Когда я вставить этот запрос в solr`s данные данных config.xml файлов и индексов, то результатом является :

{"address_home": ["HOME 111"], 
"address_coresp": ["CORESP_111"], 
"id": "1", 
"LAST_NAME": "Terry", 
"FIRST_NAME": "John", 
"_version_": 1513906493806608400 
} 

Существует только один результат адреса вместо трех.

Фрагмент моих данных-config.xml:

<document name="testDoc"> 

<entity name="testA" query="select aa.id, aa.first_name, aa.last_name, bb.address_home, bb.address_coresp from testA aa, testB bb where aa.id = bb.testA_fk"> 
    <field column="id" name="id" /> 
    <field column="first_name" name="first_name" /> 
    <field column="last_name" name="last_name" /> 
    <field column="address_home" name="address_home" /> 
    <field column="address_coresp" name="address_coresp" /> 
</entity> 
</document> 

и в schema.xml я многозначный установлен верно:

<field name="address_home" type="text_general" indexed="true" stored="true" multiValued="true" /><field name="address_coresp" type="text_general" indexed="true" stored="true" multiValued="true" /> 

Я знаю, что решение моей проблемы является вложенной сущностью элемент:

<entity name="testA" query="select * from testA"> 
field definitions... 
    <entity name="testB" query="select * from testB where testB.a_id = '${testA.id}'"> 
    field definitions... 
</entity> 
</entity 

, но есть ли возможность сделать это в одном запросе. Я хочу, чтобы достичь этого результата:

 
    {"id": "1", 
    "LAST_NAME": "Terry", 
    "FIRST_NAME": "John", 
    "address_home": ["HOME 1","HOME 11","HOME 111"], 
    "address_coresp": ["CORESP_1","CORESP_11","CORESP_111"], 
    "_version_": 1513905361988354000 
    } 

Заранее спасибо

ответ

2

Проверьте schema.xml для значения uniqueKey, я подозреваю, что он установлен на «идентификатор»:

<uniqueKey>id</uniqueKey> 

Поэтому , каждая последующая запись с идентификатором «1» перезаписывает последнее, что приводит к тому, что в индексе сохраняется только последняя запись с идентификатором «1».

Если вам необходимо обновить документы в Solr при изменении данных в базе данных, вы можете использовать идентификатор из TableB или состав идентификаторов в TableA и TableB. Если вам не нужно обновлять, вы можете сопоставить поле id с другим полем Solr и позволить Solr автоматически генерировать уникальный идентификатор.

+0

Спасибо за ваш ответ. Solr не распознает мои записи как уникальные, потому что идентификатор был одинаковым для каждой записи. Я тестировал решение с идентификатором из таблицы B, и он не выглядит так, как я хотел. Мне придется использовать вложенные объекты. – problemgenerator

Смежные вопросы