エンタープライズ検索クエリのアーキテクチャ
最終更新日: 2010年4月16日
適用対象: SharePoint Server 2010
適用先: Microsoft SharePoint Server 2010 Search および Microsoft FAST Search Server 2010 for SharePoint
Microsoft SharePoint Server 2010 の SharePoint エンタープライズ検索には、検索クエリ環境をカスタマイズするために使用できる 2 つのオブジェクト モデルがあります。
フェデレーション検索オブジェクト モデル
フェデレーション検索オブジェクト モデルでは、複数の検索エンジンまたはリポジトリからの結果を 1 つにまとめることができます。フェデレーション検索オブジェクト モデルを使用して、SharePoint Server Search、FAST Search Server 2010 for SharePoint、OpenSearch の場所、およびカスタム ランタイムに対してクエリを実行できます。SharePoint エンタープライズ検索の検索結果 Web パーツは、フェデレーション検索オブジェクト モデルの最上位に構築されます。クエリ オブジェクト モデル
Microsoft Office SharePoint Server 2007 でのエンタープライズ検索では、クエリ オブジェクト モデルを使用して、カスタム検索 Web パーツおよび検索アプリケーションを作成しました。SharePoint Server 2010 では、このオブジェクト モデルが更新されています。クエリ オブジェクト モデルを使用して、SharePoint Server Search および FAST Search Server 2010 for SharePoint に対してクエリを実行できます。フェデレーション検索オブジェクト モデルを使用して、SharePoint Server Search と FAST Search Server 2010 for SharePoint からの結果を返す場合、クエリ オブジェクト モデルは実際にはフェデレーション検索オブジェクト モデルから呼び出されます。
フェデレーション検索オブジェクト モデルの使用
フェデレーション検索オブジェクト モデルは、Microsoft.Office.Server.Search.dll 内にある Microsoft.Office.Server.Search.Query 名前空間に実装されています。フェデレーション検索オブジェクト モデルにアクセスするには、以下の DLL に参照を設定する必要があります。
Microsoft.Office.Server.dll
Microsoft.Office.Server.Search.dll
Microsoft.SharePoint.dll
いくつかのクラスがオブジェクト モデルで機能します。これらのクラスについては、以下のセクションで説明します。
QueryManager
QueryManager クラスは、フェデレーション検索オブジェクト モデルの一部である他のクラスにアクセスする際のエントリ ポイントです。このクラスは、クエリ要求を送信して結果を返します。またこのクラスからのクエリを変更してから送信することもできます。
LocationList
LocationList クラスは、フェデレーション場所のリストを持ち、場所からの結果を集計して返します。
Location
Location クラスは、オブジェクト モデル内のフェデレーション場所を表します。
ILocationRuntime
カスタム プロバイダーの実装を提供する必要がある場合は、ILocationRuntime インターフェイスを使用します。
検索結果を返す
結果は XML として返されます。以下のコード例は、フェデレーション検索オブジェクト モデルを使用して検索結果を返す方法を示します。
long lastupdate;
bool crawl;
SearchServiceApplicationProxy proxy =
(SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
LocationConfiguration[] locationConfigs;
LocationConfiguration locationConfig = null;
locationConfigs = proxy.GetLocationConfigurations(out lastupdate, out crawl);
Location location;
LocationList locationList = new LocationList();
QueryManager queryManager = new QueryManager();
foreach (LocationConfiguration locConfig in locationConfigs)
{
if (locConfig.InternalName.Equals("LocalSearchIndex"))
{
locationConfig = locConfig;
break;
}
}
location = new Location(locationConfig.InternalName, proxy);
location.UserQuery = queryText;
locationList.Add(location);
queryManager.Add(locationList);
queryManager.IsTriggered(locationList);
XmlDocument xDoc = queryManager.GetResults(locationList);
このサンプル コードの完全な、ステップごとのチュートリアルについては、「[チュートリアル] フェデレーション オブジェクト モデルを使用して、基本検索 Web パーツを作成する」を参照してください。
クエリのオブジェクト モデルを使用する
クエリ検索オブジェクトモデルは、Microsoft.Office.Server.Search.dll 内の Microsoft.Office.Server.Search.Query 名前空間に実装されています。クエリ オブジェクト モデルにアクセスするには、以下の DLL に参照を設定する必要があります。
Microsoft.Office.Server.dll
Microsoft.Office.Server.Search.dll
Microsoft.SharePoint.dll
クエリ オブジェクト モデル クラスについて
Microsoft.Office.Server.Search.Query 名前空間には、3 つのクエリ クラスが含まれます。
Query このクラスは、コードから直接使用することを目的としたものではなく、クエリ オブジェクト モデル クラスのベース実装向けに設計されています。コードでは、FullTextSqlQuery クラスと KeywordQuery クラスを使用します。
FullTextSqlQuery このクラスを使用して、SQL 構文の検索クエリを実行します。
QueryKeywordQuery このクラスを使用して、キーワード構文の検索クエリを実行します。
SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
KeywordQuery query = new KeywordQuery(proxy);
query.ResultsProvider = Microsoft.Office.Server.Search.Query.SearchProvider.Default;
query.QueryText = queryText;
query.ResultTypes |= ResultType.RelevantResults;
ResultTableCollection searchResults = query.Execute();
if (searchResults.Exists(ResultType.RelevantResults))
{
ResultTable searchResult = searchResults[ResultType.RelevantResults];
DataTable result = new DataTable();
result.TableName = "Result";
result.Load(searchResult, LoadOption.OverwriteChanges);
}
以下のコード例は、クエリ オブジェクト モデルを使用して検索結果を返す方法を示します。
このサンプル コードの完全な、ステップごとのチュートリアルについては、「[チュートリアル] クエリ オブジェクト モデルを使用して基本的な検索 Web パーツを作成する」を参照してください。