我正在使用下一个结构索引xml文档的集合:
<mydoc>
<id>1234</id>
<name>Some Name</name>
<experiences>
<experience years="10" type="Java"/>
<experience years="4" type="Hadoop"/>
<experience years="1" type="Hbase"/>
</experiences>
</mydoc>
有没有办法创建solr索引,以便它支持下一个查询:
find all docs with experience type "Hadoop" and years>=3
到目前为止,我最好的想法是将分隔年份||类型放入multiValued字符串字段,搜索所有类型为“Hadoop”的文档,然后遍历结果以选择年份&gt; = 3。显然,对于大量文档来说,这是非常低效的。
答案 0 :(得分:0)
我认为没有明显的解决方案来索引来自多对多关系的数据。在这种情况下,我会使用动态字段:http://wiki.apache.org/solr/SchemaXml#Dynamic_fields
schema.xml
中的字段定义:
<dynamicField name="experience_*" type="integer" indexed="true" stored="true"/>
所以,使用你的例子,你最终会得到这样的东西:
<mydoc>
<id>1234</id>
<name>Some Name</name>
<experience_Java>10</experience_Java>
<experience_Hadoop>4</experience_Hadoop>
<experience_Hbase>1</experience_Hbase>
</mydoc>
然后您可以使用以下查询:fq=experience_Java:[3 to *]