Solr嵌套子文档索引困惑:Schema设计与工具使用问题
Solr嵌套子文档常见问题解答
1. 是否需要分别定义父文档和子文档的Schema?
不需要单独为父、子文档各自定义Schema。Solr的嵌套文档是在同一个Schema下处理的,你只需要把父文档和子文档涉及到的所有字段,统一在同一个Schema里定义好就行。要是子文档的字段有特殊需求(比如多值、特定数据类型),直接在字段配置里设置对应的属性即可。
2. 索引此类JSON文档时,子文档集合应如何设置?是否需要传入子文档ID?字段类型是否设为strings且标记为multivalued?
- 子文档集合必须用
_childDocuments_这个固定字段名包裹,这是Solr识别嵌套结构的约定,不能自己随便改名字。 - 子文档的ID不是必须的:如果之后需要单独更新某个子文档,那必须给子文档设置唯一ID;要是只是批量索引、不需要单独操作子文档,省略ID也没问题。
- 字段类型不用局限于strings,要根据数据的实际类型选择对应的字段类型(比如文本用
text_general、数字用int等)。只有当字段需要存储多个值时,才把multivalued设为true——比如一个父文档关联多个同类型子文档,对应的字段才需要开启这个属性,不是所有嵌套字段都要这么设置。
3. 是否可以通过Schema Designer工具定义嵌套子文档?
Solr Admin里的Schema Designer工具对嵌套文档的支持很差,它主要是为扁平结构的文档设计Schema的,处理嵌套结构时经常会出现解析错误(就像你遇到的连官方示例都处理不了的情况)。建议直接手动编辑managed-schema文件,或者用Schema API来配置嵌套文档所需的字段,这样更稳定可靠。
内容的提问来源于stack exchange,提问作者Jakub Holovsky
相关产品推荐
相关产品推荐

