9

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 では、次のように 3 つのテーブルがあります。

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

人が複数のバンドに属する可能性があるという概念や、MySQL アプローチのその他の利点を無視して、私の目標は、Solr に配列を格納する方法を学ぶことです。バンドは単なる例であり、おそらく良いものではありません!

複数の を使用するための明白なアプローチはMember、multiValued フィールドです。

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

ただし、その multiValued フィールド自体にはサブ値が必要です。スキーマの作成方法に関するドキュメントはありません。私はSolr 4を使用していることに注意してください。ありがとう。

4

2 に答える 2

8

いくつかの答えがありますが、残念ながらどれも を使用していませんmultivalued

  • lucene のネストされたドキュメントを活用する (パフォーマンスが低下する可能性があります)
  • 各オプションごとにドキュメントを使用して、ドキュメントを大幅に非正規化します。次に、Lucene のグループ化機能を使用します。(これが「SOLR/Lucene 方式」です。)
  • 次のブログ @ オフセットのアドバイスを使用して、スパン クエリと用語ベクトルに従ってください: http://blog.griddynamics.com/2011/06/solr-experience-search-parent-child.html http://blog.griddynamics.com/ 2011/07/solr-experience-search-parent-child.html http://blog.griddynamics.com/2011/10/solr-experience-search-parent-child.html
  • 索引付けされたファセット名を作成します。

インデックス付きファセット名の場合、データ (1 つのドキュメント) は次のようになります。

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

リストが比較的短い (数百より短い) 場合、ドキュメントのサイズと複雑さの点では後者が最も簡単ですが、検索に関してはクライアントの膝に問題を押し付けます。

于 2012-12-12T20:36:20.770 に答える
1

Lucene は既に結合しているため、db スキーマをいくつかの注意点を付けて近似することができます。Lucene/Solr でのグループ化と結合を参照してください。Solr は最終的にそれにもアクセスできるようになります。進行中の作業を確認してください

于 2012-09-11T20:13:50.860 に答える