使用Solr索引嵌套数据

时间:2017-10-20 14:31:47

标签: solr

我正在尝试使用现有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。如果我删除嵌套实体一切正常。 知道为什么会这样吗?

1 个答案:

答案 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" />