カスタム検索タイプにハイライトを追加する

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Solrの強調表示機能を使用すると、クエリ応答のhighlightingセクションにフラグメントを含めることができます。

カスタム検索タイプにハイライトを追加するには、まず特定のフィールドでハイライトを有効にしてから、カスタム検索タイプにHighlights typeプロパティを追加します。

ハイライトを追加するには:

  1. <SOLR_DIR>\server\solr\<SOLR_CORE_NAME>\confフォルダーのmanaged-schemaファイルで、次の例に示すように、フィールドのstoredプロパティをtrueに設定して、目的のフィールドの強調表示を有効にします。

    <field name="title_t" type="text_general" multiValued="true" indexed="true" stored="true"/>
    <field name="text" type="text_general" multiValued="true" indexed="true" stored="true"/>
  2. カスタム検索タイプ クラスを作成し、Highlightsタイプを返すパブリック プロパティを追加してから、次の例に示すように、各プロパティを適切なインデックス フィールドにマップします。

    public class SimpleHighlightResultItem
        {
           [IgnoreIndexField]
           public string Title { get; set; }
        
           [IndexField("title")]
           public Highlights HighlightsInTitle { get; set; }
        
           [IgnoreIndexField]
           public string Text { get; set; }
        
           [IndexField("text")]
           public Highlights HighlightsInText { get; set; }
        }
  3. LINQクエリでカスタム検索の種類を使用します。例えば:

    var index = ContentSearchManager.GetIndex("sitecore_master_index");
        
        using (var context = index.CreateSearchContext())
        {
            var result = context.GetQueryable<SimpleHighlightResultItem>()
                .Where(it => it.Title == "Sitecore" && it.Text == "customer experience")
                .WithHighlights(hl => hl.HighlightOn(i => i.HighlightsInText));
            
            foreach (var resultItem in result)
            {
                string[] highlightSegments = resultItem.HighlightsInText.ToArray();
            }
        }

    上記のLINQクエリでは、次のSolrクエリが生成されます。 q=(title_t:("Sitecore") AND text:("customer experience")) ... &hl=true&hl.fl=text

    highlightSegmentsプロパティには、次のセグメントが含まれています。

    " complexity that has previously held marketers back, the latest version of <em>Sitecore</em> makes <em>customer</em> <em>experience</em>"

LINQクエリの複数のフィールドを強調表示する

1つのLINQクエリで、複数のインデックス フィールドの一致を強調表示できます。

次のクエリは、titleインデックス フィールドとtextインデックス フィールドの両方の強調表示を返します。

var result = context.GetQueryable<SimpleHighlightResultItem>()
        .Where(it => it.Title == "Sitecore" && it.Text == "customer experience")
        .WithHighlights(hl => hl
            .HighlightOn(i => i.HighlightsInText)
            .HighlightOn(i => i.HighlightsInTitle)
        )
        .ToArray();

上記のLINQクエリでは、次のSolrクエリが生成されます。 q=(title_t:("Sitecore") AND text:("customer experience")) ... &hl=true&hl.fl=title_t,text

HighlightsInTextプロパティには、次のセグメントが含まれています。

" complexity that has previously held marketers back, the latest version of <em>Sitecore</em> makes <em>customer</em> <em>experience</em>"

HighlightsInTitleプロパティには、次のセグメントが含まれています。

"<em>Sitecore<em> Experience Platform"
この記事を改善するための提案がある場合は、 お知らせください!