在Solr中存储数组

dot*_*hen 9 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
Run Code Online (Sandbox Code Playgroud)

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

Bands:
    BandID
    Name
People:
    PersonID
    Name
    Instrument
BandsPeople:
    BandID references Bands(BandID)
    PersonID references People(PersonID)
Run Code Online (Sandbox Code Playgroud)

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

拥有多个Members 的明显方法是multiValued字段:

<field name="member" stored="true" type="string" multiValued="true" indexed="true"/>
Run Code Online (Sandbox Code Playgroud)

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

ina*_*lus 8

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

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

id="351" band="Beatles" 
   member_0="John" instrument_0="Guitar" 
   member_1="Paul" instrument_1="Guitar" 
   ...
Run Code Online (Sandbox Code Playgroud)

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


Per*_*ium 1

Lucene 已经具有连接功能,因此您可以使用它们来近似数据库模式,但需要注意一些事项,请参阅Lucene/Solr 中的分组和连接。Solr 最终也会访问它,检查正在进行的工作