2016-08-02 2 views
0

私はSchemalessモードでSolr 6.1を使用しています。コレクションを作成してサンプルデータを索引付けした後、作成されたフィールドはすべて一意のIDを除いてMultiValued = trueに設定されました。Solr SchemalessモードでMultiValuedフィールドを作成する

SolrNetを使用してこのデータをクエリすると、結果がモデルに正しくマップされません。クエリ結果は配列として返され、モデル内のすべてのプロパティがICollection型に更新される必要があります。

サンプルデータのインデックスを作成するときに、これらのフィールドをMultiValued = falseに設定することはできますか?

問題説明する例:

1)インデックススキーマレスモードで次のモデルのサンプル:

public class TestModel 
{ 
    [SolrUniqueKey("id")] 
    public int Id { get; set; } 

    [SolrField("guid")] 
    public Guid Guid { get; set; } 
} 

2)Solrの管理・スキーマファイルは、次のフィールド

に追加されますモデルの照会/マッピング中
<field name="guid" type="strings"/> 
    <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 

3)エラー

Object of type 'System.Collections.ArrayList' cannot be converted to type 
+0

したがって、スキーマレスモードでインデックスを作成する方法があるのか​​どうかを尋ねて、何らかの方法で1つのフィールドにsingleValueだけを設定するのは正しいでしょうか? – Mysterion

+0

はい、私はスキーマレスモードでSolrを実行しようとしていますが、動的フィールドの作成はすべてを多値型として作成しています。そうすることで、すべてのプロパティをICollectionタイプに変換せずに、結果をモデルに戻すときに問題が発生します。 –

答えて

4

スキームレスモードでは、すべての値がmultiValuedになります。これは、単一の値の後に同じフィールドの複数の値があるかどうかがわからないためです。したがって、すべてのフィールドを複数の値にするとともに、数値型を最大値にアップグレードします。

ドメインをよく知っている場合は、これは簡単に調整できます。マッピングチェーン全体は、solrconfig.xmlの更新要求プロセッサチェーン(add-unknown-fields-to-the-schema)で定義されており、多値型から同等の単一値型への型マッピングを変更できます。文字列の場合は、defaultFieldTypeの値を変更します。

+0

ありがとうAlex、これは非常に便利な情報ですが、デフォルトの型を単一の値型に定義すると、多値配列型のインデックスを作成しようとするとどうなりますか?言い換えれば、これはフィールド作成の定期的な作業にどのように影響しますか? –

+0

これを手動で行っていた場合、それぞれの新しいフィールドが単一値か複数値かをどのように知ることができますか?それは名前パターンによるものです(また、[一部のフィールドのみ]にマッピングを適用できます)。 )?事前に例外を知っていますか([出荷された映画の例](http://blog.outerthoughts.com/2015/11/oh-solr-home-where-art-thou/)のように)? [最初/最後のアイテムのみを保持する](http://www.solr-start.com/info/update-request-processors/#FieldValueSubsetUpdateProcessorFactory)にしますか? –

+0

これまでのところ、デフォルト値を単一の値型に変更すると、すべてのフィールドが単数型で作成されるため、マッピングの問題はなくなります。私が今索引付けしなければならない分野はすべて特異型ですが、配列や複雑なモデルに拡張するかどうかはわかりません。その時点でどのように処理するのか分かりませんが、私はそれをテストして見なければなりません。 –

関連する問題