在Solr中存储数组

时间:2012-09-11 07:02:33

标签: solr

如何在Solr索引中存储值数组?我特意尝试制定一个schema.xml文件。

考虑以下潜在的Solr文件:

ID: 351
Name: Beatles
Members:
    1) Name: John
       Instrument: Guitar
    2) Name: Paul
       Instrument: Guitar
    3) Name: George
       Instrument: Bass
    4) Name: Ringo
       Instrument: Drums

在MySQL中我会有三个表,如:

Bands:
    BandID
    Name
People:
    PersonID
    Name
    Instrument
BandsPeople:
    BandID references Bands(BandID)
    PersonID references People(PersonID)

忽略一个人可能属于多个乐队的概念以及MySQL方法的其他优点,我的目标是学习如何在Solr中存储数组。乐队只是一个例子,可能不是一个好的!

拥有多个Member的显而易见的方法是多值字段:

<field name="member" stored="true" type="string" multiValued="true" indexed="true"/>

但是,multiValued字段本身需要有子值。我没有看到有关如何制定架构的任何文档。请注意,我使用的是Solr 4.谢谢。

2 个答案:

答案 0 :(得分:8)

有几个答案,但遗憾的是没有人使用multivalued

对于索引方面名称,您的数据(一个文档)将如下所示:

id="351" band="Beatles" 
   member_0="John" instrument_0="Guitar" 
   member_1="Paul" instrument_1="Guitar" 
   ...

对于相对较短的列表(短于数百个),后者对您的文档大小和复杂性来说是最简单的,但是在搜索时将问题强制到客户端。

答案 1 :(得分:1)

Lucene已经加入了,所以你可以通过一些注意事项使用它们使db模式近似,请参阅Grouping and Joining in Lucene/Solr。 Solr最终也会访问它,检查ongoing work