我需要将字段嵌套在字段内,solr是否提供了这种能力?
例如:我需要有一个名为Products的多值字段,每个产品都需要有一个多值字段属性。我需要在那里进行嵌套,以便万一我搜索一个属性,它只返回相应的产品信息而不是所有产品
目前,我发现如果我有10个产品,每个产品在每个文档中都有10个属性,那么在搜索属性时,将返回该doc(拥有该属性)中的所有产品。现在我再次通过比较数组索引来手动挑选出哪个产品具有该属性。因此,如果返回属性53,则它将是第6个产品。如果并非所有产品都具有相同数量的属性,那就更糟了。
有没有更简单的方法? 提前感谢您的回复。
答案 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中开箱即用的唯一方法,它看起来更像是黑客。