Azure Searchプロバイダを使用する際に「Conflict between type…」エラーが発生する


説明

2つ以上の同じ名称で異なるタイプのフィールドのインデックス作成が必要な場合、Azure Searchで問題が発生する可能性があります。この場合、Sitecoreフィールドが異なるAzure Search Edmタイプにマッピングされます。その結果、インデックスの再構築の際、Sitecore XPが同じフィールドに異なる値を追加しようとしますが、これはAzureではサポートされておらず、受信したフィールドのタイプとスキーマのフィールとの間で競合が発生します。以下のようなエラーが出力されます:

FATAL Could not add field {3C05A626-A3B1-4CBC-BF67-198537A13E20} : default value for indexable sitecore://web/{1514EA8F-E397-4443-A29D-722D99E33493}?lang=en&ver=1 
Exception: System.ApplicationException 
Message: Conflict between type of incomming field 'Edm.Boolean' and field in schema 'Edm.String' 
Source: Sitecore.ContentSearch.Azure 
  at Sitecore.ContentSearch.Azure.Schema.CloudSearchIndexSchemaBuilder.AddFields(IndexedField[] fileds) 
  at Sitecore.ContentSearch.Azure.Schema.CloudSearchIndexSchemaBuilder.AddField(String fieldName, Object fieldValue) 
  at Sitecore.ContentSearch.Azure.CloudSearchDocumentBuilder.AddField(String fieldName, Object fieldValue, Boolean append) at Sitecore.ContentSearch.AbstractDocumentBuilder`1.CheckAndAddField(IIndexable indexable, IIndexableDataField field)

解決策1

競合するフィールドがどのシステムのテンプレートにも属さない場合、フィールドが一意の名前にするよう名前を変更します。

解決策2

Sitecore XPにて同じ名前のフィールドの内の1つのフィールドのみインデックス作成をするよう設定します。これにより、選択されたフィールドの値のみのインデックス作成が実施され、検索に利用することができます。

これを実施するには、以下の手順を実施してください。

  1. 同じ名前のフィールドの中からインデックス作成される1つのフィールドを選択します。
  2. 除外リストに他のフィールドIDを追加します:
    • すべてのインデックスのフィールドを除外するには、すべてのインデックスのフィールドをデフォルトのインデックスの設定に追加します:
      sitecore\contentSearch\indexConfigurations\defaultCloudIndexConfiguration\documentOptions\exclude hint="list:AddExcludedField"
    • 特定のインデックス(Core、Masterなど)から他のフィールドIDを除外するには、他のフィールドIDを以下のインデックスに対応する設定に追加します:
      sitecore\contentSearch\configuration\indexes\indexid="index_name"\configuration\documentOptions\exclude hint="list:AddExcludedField"

※注:Sitecore XPの設定で新しいインデックスを作成し、同じ名前のフィールドから、 他のフィールドに対し上記の手順を実施することができます。これにより、両方のフィールド値を異なるインデックスでインデックス化することができます。