使用Solr 5.2.1
父母可以拥有多种类型的嵌套文档,还是每个父文档都有一种子文档?
所以例如
gathering: {
location: { name: "The park", city: "New York", country: "United States Of America", ...}
people: [
{ first_name: "John", last_name: "Smith", age: 21, ... },
{ first_name: "Jane", last_name: "Doe", age: 19, ...}
]
}
是否可以使用Solr 5.2.x或更新版本?
答案 0 :(得分:1)
是的,您可以,对不同类型的儿童文档没有限制。这可以通过block-indexing和BJQ来实现。为了检索子文档,可以使用child-transformation。
为了汇报索引表示,让我提醒你index-block的概念。 Solr / Lucene不提供本机嵌套结构 - 它们以平面方式顺序存储文档(一个接一个):
D0 / D5
代表集合中的简单文档,D1, D2, D3, D4
包含自己的索引块。 Lucene / Solr提供了将多个文档索引为单个块的方法:IndexWriter#addDocuments()。
Solr / Lucene实际上可以用这些块做什么 - 它们模仿嵌套结构关系。为了使这种关系发生,应该引入专门的区域来区分文件。让我们说type
- 文档的类型是:gathering
(父级),location
(子级,类型1)还是people
(子级,类型2):
因此,在索引时将其挂起后,您需要发布类似:
q={!parent which="type:gathering"}first_name:J*
(让我们说你希望按人first_name
进行匹配)。请注意,您只能在结果集中获取父文档。fl=id,[child parentFilter=type:gathering limit=100]
。location
建模为单实体,将people
组建模为JSON数组。如果您要开发自定义响应编写器,这可能是可能的,但我认为这太复杂,可能不适合您的业务场景。