我正在使用Solr索引我的报告数据库.报告可以包含文本,提交者信息等.这当前有效,如下所示:
"docs": [
{
"Text": "Some Report Text"
"ReportId": "1",
"Date": "2013-08-09T14:59:28.147Z",
"SubmitterId": "11111",
"FirstName": "John",
"LastName": "Doe",
"_version_": 1444554112206110700
}
]
Run Code Online (Sandbox Code Playgroud)
报告可以拥有的另一件事是观众(这是一个报告和观众之间的一对多关系.)我希望能够在我的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
}
]
Run Code Online (Sandbox Code Playgroud)
然而,我似乎无法实现这一点.这是我的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>
Run Code Online (Sandbox Code Playgroud)
而且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" />
Run Code Online (Sandbox Code Playgroud)
当我进行数据导入时,我什么都看不到.没有错误,没有任何明显的错误,但我很确定我的数据配置和/或我的架构不正确.我究竟做错了什么?
不幸的是,Solr不允许嵌套(参见http://lucene.472066.n3.nabble.com/Possible-to-have-Solr-documents-with-deeply-nested-data-structures-ie-hashes-within-hashes- td4004285.html).你需要压扁你的数据!
所以
"Viewers": [
{ ViewerId: "22222" },
{ ViewerId: "33333" }
]
Run Code Online (Sandbox Code Playgroud)
不可能.而是扁平它并有一个ViewerIds数组:
"ViewerIds": ["22222", "33333" ]
Run Code Online (Sandbox Code Playgroud)
在您的架构中,您将拥有:
<field name="ViewerIds" type="string" indexed="true" stored="true" multiValued="true" />
Run Code Online (Sandbox Code Playgroud)
并相应地修改您的数据配置.
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |