Sitecore Content Search から Solr固有の検索結果のハイライト機能を利用する

samatsu 11/27/2017 1742 N/A Sitecore Programming

Sitecore 9のサイト開発者向け新機能紹介第四弾として、 Sitecoreのコンテンツ検索APIとSolrの独自機能を利用する方法をご紹介します。Sitecore 9のドキュメントサイトに、 検索結果のハイライトやオートサジェスト、Spartial Search (スパーシャルサーチ)等 を行う方法が掲載されるようになりました。

今回は、検索結果をハイライトする Solr 固有機能を Sitecore ContentSearch API と一緒に利用するサンプルをご紹介します。

それ以外のSolrの機能を利用するサンプルに関しては、次のリンクを参照してください。

Search and indexing

 動作確認環境

  • Sitecore 9 Initial Release
  • Visual Studio 2015 Community Edition

1. 必要なDLLの参照の追加

Visual Studioのプロジェクトをセットアップします。次に、以下の次のDLLをプロジェクトの参照に追加します。dllはSitecore の NuGet から参照を追加してもいいですし、Sitecore がインストールされたフォルダーのbinフォルダーのdllを任意のフォルダーにコピーして、ファイルとして参照しても構いません。

  • Sitecore.ContentSearch
  • Sitecore.ContentSearch.Linq
  • Sitecore.ContentSearch.SolrProvider

また、Sitecoreがインストールされたフォルダーのbinフォルダーにある、 SolrNet.dll も 任意のフォルダーにコピーして、Visual Studioのプロジェクトから参照するようにしてください。

2. プログラムの準備

SitecoreのWeb アプリケーションが動作しているコンテキストであれば、どのようにプログラムを実装しても特に問題ありませんが、今回は、コントローラーレンダリングのアクションメソッドの中で、コンテンツ検索のハイライト機能を利用してみます。

サンプルコードを読みやすくするため、ソースファイル先頭の using は一部省略しています。今回の例では、通常の Content Search API と同様に、 検索コンテキストのオブジェクトを作成しています。その後、 Query 拡張関数を使用して、Solr独自の検索結果のフィールドをハイライトする機能を利用する処理を追加しています。

using Sitecore.ContentSearch;
using Sitecore.ContentSearch.Linq;
using Sitecore.ContentSearch.SolrProvider.SolrNetIntegration;
using Sitecore.ContentSearch.SearchTypes;
using SolrNet;

namespace SCSample.Areas.custom.Controllers
{
    public class HighlightController : Controller
    {
        // GET: custom/Highlight
        public ActionResult Index()
        {
            var indexName = $"sitecore_{Sitecore.Context.Database.Name.ToString().ToLower()}_index";
            var index = ContentSearchManager.GetIndex(indexName);
            using (var context = index.CreateSearchContext())
            {

                var result = context.Query<SearchResultItem>(string.Format("title_t:{0}", "ホーム"),
                    new QueryOptions()
                    {
                        Highlight = new HighlightingParameters
                        {
                            Fields = new[] { "title_t" }
                        }
                    });
                StringBuilder builder = new StringBuilder();
                if (result != null)
                {
                    foreach(var item in result)
                    {
                        foreach(var t in result.Highlights[item["_uniqueid"]].Snippets["title_t"])
                        {
                            builder.Append(t);
                        }
                    }
                }
                return Content(builder.ToString());
            }
        }
    }
}

コードのサンプルは、Using Solr to highlight search resultsも参照してください。

3.動作確認

インストール時に初めからある ホーム アイテムの タイトルフィールドを 次のように変更して保存した後に、コントローラーレンダリングをHome アイテムのプレゼンテーションにバインドして、Home ページをエクスペリエンスエディターでプレビューします。

ブレークポイントを設定して、ハイライト結果を見ると、 <em> タグで強調されていることがわかります。

簡単ですが、動作確認のご紹介は以上となります。

Sitecore Content Search から Solrの機能を使うサンプルは、冒頭で紹介したリンク先にもいくつか紹介されていますのでこちらもご参照ください。