Solrフィールド名解決の使用
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Solrは、検索プロバイダーとして、ドキュメントのインデックス作成と検索の規則を規定します。Sitecoreがインデックス作成のためにドキュメント (アイテム) をSolrに送信する場合、アイテム フィールドはSolrフィールドにマッピングする必要があります。マッピングの例としては、Sitecore Item NameフィールドがSolr _nameフィールドにマップされる場合が挙げられます。
残念ながら、多数のSitecoreフィールドをSolrフィールドに手動で一致させることは現実的ではありません。ただし、Solr動的フィールド を使用して、Sitecoreフィールドの自動マッピングを実行できます。
自動マッピングの例としては、SitecoreがSitecore parsedcreatedby計算文字列フィールドをSolr parsedcreatedby_s動的文字列フィールドにマップする場合が挙げられます。これは、parsedcreatedbyが *_sフィールド名 形式にマップされるSitecore stringインデックス フィールド タイプに関連付けられているためです。
すべてのマッピングはSitecore.ContentSearch.Solr.DefaultIndexConfiguration.configファイルで指定されます。
現在の設定は、すべてのSitecoreフィールド タイプをカバーしています。ただし、フィールド タイプのマッピングがない場合、SitecoreはSolrスキーマで定義されたフィールドと照合することで、フィールド名のマッピングを試みます。一致するものが見つからない場合、Sitecoreはフィールド値のタイプを使用してマッピングを決定します。
インデックス作成時のフィールド名解決
インデックス作成時のフィールド名解決
たとえば、amountという名前のSitecoreフィールドについて考えてみます。数値を保持するため、Sitecore numberタイプのフィールドです。Sitecoreフィールドがインデックス・フィールド・タイプに手動でマップby nameされていない場合、Sitecoreは、次の順序でSolr動的フィールドにby Sitecore field type自動的にマップします。
-
Sitecore、AddFieldByFieldTypeNameセクションのSitecore number typeフィールドをSolr float typeフィールドにマップします。
-
Sitecore、Solr float typeフィールドをAddTypeMatchセクションの {0}_tfフィールド名形式にマップします。
-
Sitecoreは、{0} 部分をSitecore amountフィールド名に置き換えて、Solr amount_tfフィールド名にします。
-
Sitecoreは、amountという名前のSitecore number型フィールドをamount_tfという名前のSolr動的float型フィールドとしてインデックス付けします。
フィールド名によるマッピングの上書き
Sitecore AddFieldByFieldNameセクションの各フィールドのAddFieldByFieldTypeNameセクションのマッピングを上書きできます。この機能を使用すると、たとえば、Sitecore titleフィールドをSolr textタイプのフィールドとしてインデックス付けできますtitle_t。Sitecore、Solrフィールド タイプに一致するフィールド タイプではなく、Sitecoreフィールドnameを使用します。
Sitecoreはフィールド名を検索するときに、正確な名前と一致しようとします。完全に一致するものがない場合、Sitecoreはカルチャ サフィックスとSolrダイナミック フィールド サフィックスを削除して再試行します。たとえば、次のフィールド名はtitleフィールドにマップされます。
-
Title_en - _enは英語ISO言語コードと一致します。
_da、_deなども同様です。
-
Title_t - _tサフィックスは、テキスト タイプの形式、より具体的には動的フィールド *_tと一致します。
_s、_smなども同様です。
計算フィールドのインデックス作成
Sitecore Sitecore計算フィールドをAddComputedIndexFieldセクションとAddTypeMatchセクションのSolr動的フィールドにマップします。たとえば、SitecoreはSitecore calculateddimension計算フィールドをSolr stringCollectionタイプ フィールドにマップし、次のようにインデックス付けしますcalculateddimension_sm
検索中のフィールド名解決
検索中のフィールド名解決
Sitecoreは、検索中に同様の方法でフィールドを解決します。
たとえば、「 title:Casablanca」を検索すると、Sitecoreはtitleフィールド・タイプを次の順序でSolrフィールド名形式に解決します。
-
名前で解決します。
Sitecoreは、言語サフィックス (_en、_daなど) または動的フィールド サフィックス (_t、_s、_smなど) をフィールド名から削除し、AddFieldByFieldName設定を検索して一致するものを見つけます。一致するものが見つからない場合、SitecoreはSolrスキーマで定義されたSolrフィールド名で一致するものを探します。
-
検索値のCLRタイプで解決します。
Sitecoreがフィールドを名前で解決できない場合は、CLRタイプを使用して、構成されたAddTypeMatchと照合します。この例では、CLRの種類 "Casablanca" がSystem.Stringで、System.Stringの最初のAddTypeMatch構成を使用してタイトル名が解決されます。 次のAddTypeMatch設定では、最初のエントリがlowercaseStringされるため、titleフィールドはtitle_lsとして解決されます。
-
テンプレートを見つけて解決します。
Sitecoreが名前またはCLRタイプでフィールドを解決できない場合、同じ名前のテンプレート フィールドが検索されます。複数のテンプレート フィールドが見つかった場合は、最初のフィールドが使用されます。Sitecoreがテンプレート フィールドを識別すると、フィールドのタイプがAddFieldByFieldTypeNameと照合されます。
LINQでの検索
SitecoreがLINQを使用して厳密に型指定されたプロパティで検索要求を実行する場合、Sitecoreはプロパティの.NETランタイム型を使用して、AddTypeMatchセクションのSolrフィールド名を解決します。
ただし、SitecoreがAddTypeMatchセクションでフィールド・タイプ名をmultiple .NETランタイム・タイプにマップできる状況では、Sitecoreはテンプレート・リゾルバーを使用して、テンプレートとフィールド・タイプをSolrに照会します。
たとえば、Sitecore airportプロパティは、AddTypeMatchセクションのstringランタイム型とtext .NETランタイム型の両方にマップされるSystem.String型です。この結果、2つのフィールド名形式 ({0}_sと {0}_t) と2つのSolr動的フィールド名 (airport_sとairport_tが得られます。
Sitecoreはテンプレート リゾルバーを使用して、テンプレートとフィールド タイプを次の順序でSolrにクエリします。
-
Sitecoreは、次のようなリゾルバー要求をSolrに送信します。
大事な2つのテンプレートで同じフィールド ( airportフィールドなど) が定義されている場合、テンプレート リゾルバーは2つの結果を不確定な順序で返します。Sitecoreは常に最初の結果を選択するため、解像度に一貫性がなくなります。これは、airportが1つのテンプレートで1行テキスト フィールド タイプとして定義され、別のテンプレートでドロップリスト フィールド タイプとして定義されている場合に特に問題になります。
-
Solrは、SitecoreAddFieldByFieldTypeNameセクションのSolr textフィールド・タイプにマップされるsingle-line textフィールド・タイプを返します。
-
Sitecore、Solr textフィールド・タイプをAddTypeMatchセクションの {0}_tフィールド名形式にマップします。
-
Sitecoreは、{0} 部分をSitecore airportプロパティ名に置き換えて、Solr airport_tフィールドに解決します。
-
Sitecoreは最終的な検索クエリをSolrに送信します。
テンプレートのインデックスが正しく作成されていることの確認
テンプレートのインデックスが正しく作成されていることの確認
Sitecore Content Searchは、正しいフィールド タイプの解決に基づいて完全で満足のいく検索結果を提供するために、インデックスが作成されるテンプレートに依存しています。テンプレートにインデックスを付けないままにする構成の例を次に示します。
-
クローラのRootタグ ( /sitecore/templatesサブツリーは含まれません):
-
インデックス ドキュメント オプションは、テンプレート フィールド アイテムを除外するように設定されています。
構成で必要な場合は、TemplateIndexNameタグを追加して、テンプレートがインデックス化されるようにします。タグは、クローラが /sitecore/templatesルートの下にあるすべてのテンプレートフィールド項目をインデックス化するインデックスを指す必要があります。
TemplateIndexNameを指定すると、Sitecore Content Searchは、Solrへのクエリで使用されるSitecoreフィールドのSolrマッピングを正しく解決できます。テンプレートのインデックス作成に失敗すると、検索要求が失敗したり、検索結果が空になったりする可能性があります。