コンテンツ検索 (Content Search) API を使用して アイテムを検索するサンプルプログラムを作成してみました。詳細な使い方やサポートされるLINQメソッドの一覧などはアイテムバケットとサーチに関係するSDNドキュメントを参照してください。
検証環境
- Sitecore CMS 7.1 Update 1
コンテンツ検索のサンプルプログラムは次のようなコードになります。サンプルではWebフォームで検索ボタンがクリックされたらテキストボックスに入力されたテキストを使用してアイテムの名前と前方一致するアイテムの一覧を検索しています。検索に使用するインデックスの指定方法としてインデックス名を使用する方法をコメントして参考までに記載しています。
namespace v72u1.Web.layouts { using Sitecore.Data.Items; using System; using System.Linq; using Sitecore.ContentSearch; using Sitecore.ContentSearch.Linq; using Sitecore.ContentSearch.SearchTypes; public partial class SearchContent : System.Web.UI.UserControl { private void Page_Load(object sender, EventArgs e) { // Put user code to initialize the page here } protected void btnSearch_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtSearch.Text)) return; // 検索パターンその1 var item = new SitecoreIndexableItem(Sitecore.Context.Item); // 検索 using (var context = Sitecore.ContentSearch.ContentSearchManager.GetIndex(item).CreateSearchContext()) { var query = context.GetQueryable<SearchResultItem>().Where(i => i["_name"].StartsWith(txtSearch.Text)); var results = query.GetResults(); gvResult.DataSource = results.Hits.Select(x => new { Path = x.Document.Path, Name = x.Document.Name, TemplateName = x.Document.TemplateName }); gvResult.DataBind(); } // 検索パターン その2 検索インデックス名をハードコードする場合 //using (var context = Sitecore.ContentSearch.ContentSearchManager.GetIndex("sitecore_master_index").CreateSearchContext()) //{ // var query = context.GetQueryable<SearchResultItem>().Where(i => i.Name.StartsWith(txtSearch.Text)); // var results = query.GetResults(); // gvResult.DataSource = results.Hits.Select(x => new { Path = x.Document.Path, Name = x.Document.Name, TemplateName = x.Document.TemplateName }); // gvResult.DataBind(); //} } } }
aspx は単純に GridView と テキストボックスとボタンを配置しているだけなので省略します。
実際に実行すると下図のようにアイテムを検索することができます。
注意点としてコンテンツ検索APIを使用する本さんぷrぷが動作するには アイテムバケット が有効になっている必要があります。アイテムが実際に検索されるにはインデックスが作成されている必要があるので注意してください。
さんのコメント: さんのコメント: