我正在尝试使用现有sql数据库中的solr索引嵌套数据。 DB具有这种结构 https://dev.mysql.com/doc/employee/en/images/employees-schema.png
我的db-schema.xml如下:
<document>
<entity name="employees"
rootEntity="true"
query="select emp_no as 'id', first_name, last_name from employees limit 10;">
<field column="id" />
<field column="first_name" />
<field column="last_name" />
<entity child="true"
name="dept_emp"
query="select emp_no, dept_no from dept_emp where dept_emp.emp_no=${employees.id}">
<field column="dept_no" name='dept_no'/>
</entity>
</entity>
</document>
我的solr的managed-schema.xml是这样的:
<field name="first_name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="last_name" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="dept_no" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
问题是我收到了这个错误:
org.apache.solr.common.SolrException: [doc=null] missing required field: dept_no
即使我删除
<field name="dept_no" type="string" indexed="true" stored="true" required="true" multiValued="false" />
我收到错误,缺少last_name。如果我删除嵌套实体一切正常。 知道为什么会这样吗?
答案 0 :(得分:1)
这种情况会导致需要将字段应用于父文档的事实。因此,您的父文档也需要拥有这些字段,即使它们只对孩子们有意义。
同样的问题将显示“id”字段...只需删除所需的属性。
编辑:保留所需的attr,添加此项(仅适用于此处显示的dept_no,其余部分执行相同操作):
<entity name="employees"
rootEntity="true"
query="select emp_no as 'id', first_name, last_name, 'DUMMY' as dept_no from employees limit 10;">
<field column="id" />