2013-08-27 4 views
4

Я использую Solr для индексации моей базы данных отчетов. Отчеты могут иметь текст, передающую информацию и т.д. Это в настоящее время работает и выглядит следующим образом:Множественное отображение внутри Apache Solr

"docs": [ 
     { 
     "Text": "Some Report Text" 
     "ReportId": "1", 
     "Date": "2013-08-09T14:59:28.147Z", 
     "SubmitterId": "11111", 
     "FirstName": "John", 
     "LastName": "Doe", 
     "_version_": 1444554112206110700 
     } 
] 

Другой вещь, отчет может иметь это телезрители (который является один-ко-многим между одним докладом, а также . зрителей) Я хочу, чтобы иметь возможность захватить те зрители, как это в моем выходе JSON: Я не могу

"docs": [ 
     { 
     "Text": "Some Report Text" 
     "ReportId": "1", 
     "Date": "2013-08-09T14:59:28.147Z", 
     "SubmitterId": "11111", 
     "FirstName": "John", 
     "LastName": "Doe", 
     "Viewers": [ 
      { ViewerId: "22222" }, 
      { ViewerId: "33333" } 
     ] 
     "_version_": 1444554112206110700 
     } 
] 

, чтобы это произошло, однако. Вот мои data-config.xml (части удалены, которые не являются необходимыми для вопроса):

<entity name="Report" query="select * from Reports"> 
    <field column="Text" /> 
    <field column="ReportId" /> 
    <!-- Get Submitter Information as another entity. --> 
    <entity name="Viewers" query="select * from ReportViewers where Id='${Report.ReportId}'"> 
    <field column="Id" name="ViewerId" /> 
    </entity> 
</entity> 

И schema.xml:

<field name="Text" type="text_en" indexed="true" stored="true" /> 
<field name="ReportId" type="string" indexed="true" stored="true" /> 
<field name="Viewers" type="string" indexed="true" stored="true" multiValued="true" /> 
<field name="ViewerId" type="string" indexed="true" stored="true" /> 

Когда я делаю импорт данных, я просто не вижу ничего. Нет ошибок, ничего явно не так, но я уверен, что мои данные-config и/или моя схема неправильны. Что я делаю не так?

ответ

8

К сожалению, Solr не допускает гнездования (см. http://lucene.472066.n3.nabble.com/Possible-to-have-Solr-documents-with-deeply-nested-data-structures-i-e-hashes-within-hashes-td4004285.html). Вам нужно сгладить ваши данные!

Так

"Viewers": [ 
      { ViewerId: "22222" }, 
      { ViewerId: "33333" } 
     ] 

не представляется возможным. Вместо того, чтобы выровнять его и имеют ViewerIds массив:

"ViewerIds": ["22222", "33333" ] 

В вашей схеме, вы будете иметь:

<field name="ViewerIds" type="string" indexed="true" stored="true" multiValued="true" /> 

и изменять данные-конфигурации соответственно.