クライアント アプリケーションから FAST Search Server にクエリを実行する

Query Web サービスは、Microsoft SharePoint Server 2010 の SharePoint エンタープライズ検索機能をクライアント アプリケーションに公開します。

最終更新日: 2011年9月1日

適用対象: SharePoint Server 2010

この記事の内容
前提条件
手順 1: フォームベースのクライアント アプリケーションを設定および構成する
手順 2: クライアント アプリケーション用のコードを作成する
手順 3: クライアント アプリケーションをテストする

注意

この文脈では、クライアント アプリケーションとは、Query Web サービスを呼び出すアプリケーションを指します。これには、Microsoft ASP.NET Web アプリケーションあるいは Windows Forms アプリケーションのようなアプリケーションが含まれます。

Query Web サービスの QueryEx Web メソッドは、検索サービスにクエリを送り、DataSet オブジェクトで結果を返します。以下のチュートリアルでは、Query Web サービスを使用して、QueryEx Web メソッドで Windows ベースのクライアント アプリケーションに FAST Search Server 2010 for SharePoint の結果を返す方法について説明します。以下のタスクが含まれます。

このチュートリアルは、「[チュートリアル] クライアント アプリケーションから SharePoint Search にクエリを実行する」を拡張したものです。Visual Studio 2010 プロジェクトにより 2 番目の DataGridView コントロールが追加され、コード例で FAST クエリ言語 (FQL) のクエリ構文が使用されます。

適用先: Microsoft FAST Search Server 2010 for SharePoint

前提条件

このチュートリアルを完了するために、以下のことを確認してください。

  • Microsoft Visual Studio 2010 が開発コンピューターにインストールされている

  • FAST Search Server 2010 for SharePoint を使用するように設定した SharePoint Server 2010 サイトにアクセスする権限を持っている

手順 1: フォームベースのクライアント アプリケーションを設定および構成する

Visual Studio 2010 で、以下の要素を含むフォームベースのクライアント アプリケーションを設定します。

  • クエリ入力用のテキスト ボックス。

  • クエリ ボタン。

  • クエリ結果テーブル用の DataGridView コントロール。

  • その他のクエリ結果テーブル用の DataGridView コントロール。この記事のコード例ではコントロールは使用されませんが、「クエリ絞り込み (FAST Search Server 2010 for SharePoint)」などのその他の記事では使用されます。

Visual Studio プロジェクトを設定するには

  1. Visual Studio 2010 で、[ファイル] メニューで [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [インストールされているテンプレート] の、[Visual C#] を展開して、[Windows] をクリックします。

  3. [Windows フォーム アプリケーション] を選択します。[名前] フィールドに「QueryExClientSample」と入力し、[OK] をクリックします。

Query Web サービスに Web 参照を追加するには

  1. ソリューション エクスプローラーで、プロジェクトの名前を右クリックして、次に [サービス参照の追加] をクリックします。

  2. [サービス参照の追加] ダイアログ ボックスで、[詳細設定] をクリックします。

  3. [サービス参照設定] ダイアログ ボックスで、[Web 参照の追加] をクリックします。

  4. [サービス参照の追加] ダイアログ ボックスで、[URL] テキスト フィールドに「http://SERVER/_vti_bin/search.asmx」と入力します。ここで SERVER は、SharePoint サイトへの URL となります。次に、[移動] をクリックします。

  5. Web サービスが見つかったとき、QueryService Web サービスのためのページが [Web 参照の追加] ダイアログ ボックスのメイン ウィンドウに表示されます。[Web 参照名] フィールドに「QueryWebServiceProxy」を入力して、次に [参照の追加] をクリックします。

クライアント アプリケーションの既定のフォームを変更するには

  1. ソリューション エクスプローラーで、フォーム (既定のフォームを使用している場合は Form1) をダブルクリックします。

  2. クエリ ボタンを追加します。

    [ツールボックス] で、[コモン コントロール] を展開して、[ボタン] をクリックし、コントロールをフォームにドラッグします。[プロパティ] で、[(名前)] を「queryButton」に変更し、[テキスト] プロパティに「Query」と入力します。

  3. クエリ入力ボックスを追加します。

    [ツールボックス] で、[テキスト ボックス] をクリックして、コントロールをフォームにドラッグします。[プロパティ] で、[(名前)] を「queryTextBox」に変更して、[Multiline] を [True] に設定します。

  4. クエリ結果テーブル用の DataGridView コントロールを追加します。

    [ツールボックス] で、[データ] を展開して、[DataGridView] をクリックし、コントロールをフォームにドラッグします。[プロパティ] で、[(名前)] を「resultsGrid」に変更します。

  5. その他のクエリ結果テーブル用の DataGridView コントロールを追加します。

    [ツールボックス] で、[データ] を展開して、[DataGridView] をクリックし、コントロールをフォームにドラッグします。[プロパティ] で、[(名前)] を「secondGrid」に変更します。

  6. エラー メッセージ用の Label コントロールを追加します。

    [ツールボックス] で、[ラベル] をクリックして、コントロールをフォームにドラッグします。[プロパティ] で、[(名前)] を「resultsLabel」に変更して、[テキスト] プロパティの内容を削除します。

手順 2: クライアント アプリケーション用のコードを作成する

コードは、設定した queryButton に関連付けられているクエリ ハンドラーを実装します。コードでは以下のタスクを実行します。

  • Query Web サービス接続の設定

  • Query XML の作成

  • ユーザーが入力したクエリの FQL STRING 演算子への追加

  • QueryEx Query Web サービス メソッドを使用したクエリの実行

  • 1 番目の DataGridView コントロールへのクエリ結果の表示

  • クエリ結果用の拡張プロパティの MessageBox への表示

クライアント アプリケーション用のコードを作成するには

  1. クエリ ボタンをダブルクリックして、Click イベントのイベント ハンドラーを追加します。queryButton_Click イベント ハンドラー内にカーソルが置かれた状態で、コード エディターが開きます。

  2. 以下の名前空間参照を追加します。

    using System.Collections;
    
  3. queryButton_Click イベントに以下のコードを追加します。

    try
    {
       // Instantiate the Query Web service.
       QueryWebServiceProxy.QueryService queryService = new QueryWebServiceProxy.QueryService();
       // Use the credentials of the user running the client application: 
       queryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
       // Run the QueryEx method, returning the results to a DataSet:
       System.Data.DataSet queryResults = queryService.QueryEx(GetXMLString());
       // Set the first DataGridView data source to the RelevantResults table in the DataSet object:
       resultsGrid.DataSource = queryResults.Tables["RelevantResults"];
    
       // Print extended properties for the result set in a message box.
       StringBuilder props = new StringBuilder("Extended properties on result object:\n");
       foreach (DictionaryEntry de in queryResults.ExtendedProperties)
       {
          props.AppendFormat("{0}: {1}\n", de.Key, de.Value);
       }
       props.Append("\nExtended properties on RelevantResults:\n"); 
       foreach (DictionaryEntry de in queryResults.Tables["relevantresults"].ExtendedProperties)
       {
          props.AppendFormat("{0}: {1}\n", de.Key, de.Value);
       }
       MessageBox.Show(props.ToString());
     }
    catch (Exception ex)
    {
       resultsLabel.Text = ex.ToString();
    }
    
  4. GetXMLString 関数の QueryEx メソッドに渡されるクエリ XML 文字列を作成します。

    GetXMLString 関数を作成するには、Form1 クラスに以下のコードを追加します。

    // Build the query XML string.
    private string GetXMLString()
    {
       // queryXML1 is the part of the XML before the query string.
       string queryXML1 = @"<QueryPacket xmlns='urn:Microsoft.Search.Query'>
       <Query>
          <SupportedFormats>
             <Format revision='1'> urn:Microsoft.Search.Response.Document:Document</Format>
          </SupportedFormats>
          <Context>
             <QueryText language='en' type='FQL'>";
    
       // queryXML2 is the part of the XML after the query string.
       string queryXML2 = @"
             </QueryText>
          </Context>
          <ResultProvider>FASTSearch</ResultProvider>
          <Range>
             <Count>10</Count>
          </Range>
       </Query>
    </QueryPacket>";
    
    // Build the Query XML string.
       StringBuilder xmlString = new StringBuilder(queryXML1); 
       xmlString.Append(GetFQLString());
       xmlString.Append(queryXML2);
       return xmlString.ToString();
    }
    
    // Build the FQL query string.
    // string("<user-typed query>", mode="and")
    private string GetFQLString()
    {
       StringBuilder fqlString = new StringBuilder("string(\"");
       fqlString.Append(queryTextBox.Text);
       fqlString.Append("\", mode=\"and\")");
       return fqlString.ToString();
    }
    

手順 3: クライアント アプリケーションをテストする

1 つ以上のクエリ用語をクエリ ボックスに入力して、クライアント アプリケーションをテストします。クエリは、入力した用語の AND を表します。

クライアント アプリケーションをテストするには

  1. クライアント アプリケーションをビルドして実行するには、F5 キーを押します。

  2. 1 つ以上の単語をテキスト ボックスに入力します。

  3. Query Web サービスにクエリを送信するには、[クエリ] をクリックします。返された結果は、1 番目の DataGridView コントロールに表示されます。拡張プロパティは、MessageBox ポップアップ ウィンドウに表示されます。

関連項目

参照

QueryService

概念

Query Web サービスの使用

[チュートリアル] クライアント アプリケーションから SharePoint Search にクエリを実行する

FAST クエリ言語 (FQL) 構文のリファレンス

検索クエリを作成する

その他の技術情報

Microsoft.Search スキーマ リファレンス