2

Solr 6.1 をスキーマレス モードで使用しています。コレクションを作成し、サンプル データにインデックスを付けた後、作成されたフィールドはすべて、一意の ID を除いて M​​ultiValued = true に設定されました。

問題は、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
4

1 に答える 1

7

スキーマレス モードではmultiValued、同じフィールドに対して単一値の後に複数値の値が続くかどうかがわからないため、すべてが行われます。したがって、すべてのフィールドが多値になり、数値型が最大にアップグレードされます。

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

于 2016-08-03T15:27:29.070 に答える