这只是一个例子,但它会帮助我进一步发展
我有一个对象" person"与字段[年龄,名称]
我的schema.xml
<field name="age" type="string" indexed="true" stored="false"/>
<field name="name" type="string" indexed="true" stored="false"/>
一切都还可以,但我想再添加+1字段&#34;关系&#34; (或父母,孩子等) 人[年龄,姓名,关系] - &gt;关系也有[年龄,姓名]
我怎么能将FieldType关系插入到schema.xml中?
<field name="age" type="string" indexed="true" stored="false"/>
<field name="name" type="string" indexed="true" stored="false"/>
<field name="relation" type="???" indexed="true" stored="false"/>
我想添加一个Field,它会获取上面的所有现有字段
<field name="field1" type="string">
<field name="field2" type="string">
<field name="field3" type="string">
<field name="field4" type="field1,field2,field3">
答案 0 :(得分:1)
Solr并不真正支持您想要的内容,因此您可能要么使用包含指向其他文档的ID的多值字段对其进行索引,例如(年龄字段为a的原因)字符串而不是int?):
<field name="id" type="int" indexed="true" stored="false"/>
<field name="age" type="string" indexed="true" stored="false"/>
<field name="name" type="string" indexed="true" stored="false"/>
<field name="relation" type="int" multiValued="true" indexed="true" stored="false" />
..然后在显示文档时查询具有给定关系的所有文档(向Solr发出两个查询)。
您可以also use nested child documents,但需要更多处理(因为所有内容都包含在一个文档中,您必须一起更新所有内容)。
答案 1 :(得分:0)
Solr更喜欢一切都是非规范化的方式。多值就是这个方向。但正如@MatsLindh所说,它涉及2个查询,因为大多数时候子实体不仅仅是单个字段(字符串数组v / s实体数组)。
(您的案件中的父母和子女是人和“关系”) 嵌套的子文档,更像是对象关系,就像我们在其他框架中一样。你有父文件,你有子文件,并且solr维持这种关系,我们应该有一个与孩子的父母相同的字段。关于这一点的好处是
嵌套的东西,是最近添加的。我们正在使用清晰的作品与solr互动。他们建议不要使用嵌套文档,因此我们最终得到了多值。但是,如果您的基础架构允许,并且solr框架本身具有该功能,我认为使用它没有错。