字段可以嵌套在Solr中吗?

时间:2014-06-04 07:25:53

标签: solr

我需要将字段嵌套在字段内,solr是否提供了这种能力?

例如:我需要有一个名为Products的多值字段,每个产品都需要有一个多值字段属性。我需要在那里进行嵌套,以便万一我搜索一个属性,它只返回相应的产品信息而不是所有产品

目前,我发现如果我有10个产品,每个产品在每个文档中都有10个属性,那么在搜索属性时,将返回该doc(拥有该属性)中的所有产品。现在我再次通过比较数组索引来手动挑选出哪个产品具有该属性。因此,如果返回属性53,则它将是第6个产品。如果并非所有产品都具有相同数量的属性,那就更糟了。

有没有更简单的方法? 提前感谢您的回复。

3 个答案:

答案 0 :(得分:0)

不确定它是否对您的情况有用,但这就是我在data-config.xml

中所做的事情
<document>
<entity name="paper" query="SELECT * FROM papers">
    <field column="title" name="title"/>
    <field column="title" name="title_unstem"/>
    <field column="year" name="publish_date"/>
    <entity name="person" query="SELECT * FROM papers_people PA, people A WHERE PA.person_id = A.id AND PA.paper_id='${paper.id}'">
        <field column="id" name="author_id"/>
        <field column="first_name" name="first_name"/>
        <field column="last_name" name="last_name"/>
        <field column="full_name" name="author"/>
     </entity>
     <entity name="volume" query="SELECT * FROM volumes WHERE id='${paper.volume_id}'">
         <field column="id" name="volume_id"/>
         <field column="title" name="volume_title"/>
         <field column="anthology_id" name="volume_anthology"/>
     </entity>
</entity>
</document>

基本上你可以看到我的论文有很多作者,属于一卷。我正在使用Blacklight gem在Ruby on Rails上做这个,所以如果你有任何问题请问我。

答案 1 :(得分:0)

是的,最近的Solr支持嵌套文档。虽然,有一些权衡。大多数情况下,您必须索引并删除整个父+子块。但对你的情况来说这应该不是问题。

之后,您可以使用BlockJoins以几种不同的方式搜索它们。

答案 2 :(得分:0)

如果这是您的关键要求,并且您没有在solr上投入太多,那么,我建议您看一下elasticsearch。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html

否则,blockjoin是在solr中开箱即用的唯一方法,它看起来更像是黑客。