第12章

検索クエリタイプ

この章では、exteNd Director SearchサブシステムでサポートされているAutonomyベースクエリのタイプおよびこれらを実装する方法について説明します。

説明するクエリは、次のとおりです。

For more information基礎的な情報については、を参照してください。

 
Top of page

ブールクエリ

説明

ブールクエリ」は、論理演算子を使用して、検索結果を調整します。

構文

  word1+LOGICAL OPERATOR+word2+LOGICAL OPERATOR+word3+LOGICAL OPERATOR+... wordN

論理演算子の優先順位(降順)は、次のとおりです。

  1. NOT

  2. AND, WNEAR, NEAR

  3. OR, XOR, EOR

括弧を使用して、演算子およびオペランドをまとめることができます。

  effect+recession+AND+economic+AND+slowdown+AND+consumer+AND+spending+OR+buying

この例では、括弧は必要ありません。これは、ANDがORより優先されるからです。評価の順序を変更するには、次の例のように、括弧を使用します。

  ((effect+recession+AND+economic)+OR+(+slowdown+AND+consumer+AND+spending))+OR+buying+OR+(effect+AND+economic+NOT+depression)

実装

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のようなブールクエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set the query type to be "text"
  query.setQueryType(query.QUERY_TYPE_TEXT);
  // Specify the query
  query.setText("effect+AND+recession+AND+economic+AND+slowdown+AND+consumer+AND+spending+OR+buying");
  ...

 
Top of page

概念クエリ

説明

概念クエリ」は、意味により関連付けられるコンテンツ、および検索条件との関連度でランクが付けられたコンテンツを返します。クエリ文字列は、できるだけ特定のものにしてください。通常、段落または少なくとも文章を使用します。

構文

  word1+word2+word3+... wordN

  The+effect+of+the+recession+on+consumer+spending

実装

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような概念クエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set query type to be "text"
  query.setQueryType(query.QUERY_TYPE_TEXT);
  // Specify the query
  query.setText("The+effect+of+the+recession+on+consumer+spending");
  ...

 
Top of page

フィールドクエリ

説明

フィールドクエリ」は、ドキュメントのメタデータ、またはメタデータおよびコンテンツを1つのメソッドコールで検索できます。メタデータとは、標準メタデータまたはカスタムメタデータ、あるいはその両方のことです。フィールドクエリを発行する前に、で説明されているように、検索するメタデータのタイプ(標準メタデータまたはカスタムメタデータ、あるいはその両方)を指定するように検索環境が設定されているか確認してください。

構文

検索するメタデータを指定するには、EbiQueryインタフェースを実装するオブジェクトでメソッドsetFieldSpecList()を呼び出して、フィールド指定子リストを設定する必要があります。複数のフィールドを検索する場合、フィールドの検索方法を指定するフィールドブール式を定義して、2つめの引数としてこの式をsetFieldSpecList()に渡す必要があります。検索しているフィールドが1つだけの場合、この引数をnullにします。

フィールド指定子リスト   「フィールド指定子リスト」の構文は、次のとおりです。

  fnameFieldname1=*value1*+fnameFieldname2=*value2*+... fnameFieldnameN=*value3*

メタデータのインデックスが作成されている限り、標準またはカスタムメタデータフィールドの名前を使用して、フィールドクエリを発行できます。

標準メタデータのフィールド名は、DirectorDRE.cfgのリストに示されています。このファイルは、次のディレクトリにあります。

  exteNd Director installation directory\autonomy\engine

フィールドブール式   「フィールドブール式」の構文は、次のとおりです。

  fnameFieldname1+LOGICAL OPERATOR+fnameFieldname2+LOGICAL OPERATOR+... fnameFieldnameN

論理演算子には、キーワードAND、OR、およびNOTを使用できます。

たとえば、CM (Content Management)リポジトリで、Research Studyという名前のドキュメントタイプ、およびTopicという名前のカスタムフィールドを定義しているとします。トピックがEconomyの調査研究をすべて検索する場合、次の手順を実行します。

  1. 次のように、フィールド指定子リストを定義します。

      String fieldSpecList = "fnameDOCTYPENAME=*Research Study*+fnameTopic=*Economy*";
    
  2. 次のように、検索を指示するブール式を定義します。

      String fieldBooleanExpr = "fnameDOCTYPENAME+AND+fnameTopic";
    
  3. これらの2つの文字列を引数としてsetFieldSpecList()メソッドに渡します。

      query.setFieldSpecList(fieldSpecList, fieldBooleanExpr);
    

実装

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のようなフィールドクエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set query type to be "text"
  query.setQueryType(query.QUERY_TYPE_TEXT);
  // Specify the query
  query.setText("effect+recession+economic+slowdown+consumer+spending");
  // Provide field specifiers (to find research studies about the
  // economy)
   String fieldSpecList = "fnameDOCTYPENAME=*Research Study*+fnameTopic=*Economy*"
   String fieldBooleanExpr = "fnameDOCTYPENAME+AND+fnameTopic";
   query.setFieldSpecList(fieldSpecList, fieldBooleanExpr);
  ...

この例では、コンテンツ検索の条件(setText()メソッドを使用)、およびメタデータ検索の条件(setFieldSpecList()メソッドを使用)を1つのクエリ式で定義しています。これは、runQuery()メソッドの1回のコールでコンテンツおよびメタデータの両方を検索できるため、強力な機能です。

 
Top of page

あいまいクエリ

説明

あいまいクエリ」は、スペルが間違っている場合でも用語を一致させようとします。

実装

あいまいクエリは、クエリタイプをfuzzyに定義する必要があるという点を除いて、概念クエリと同じ方法で実装されます。exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のようなあいまいクエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set query type to be "fuzzy"
  query.setQueryType(query.QUERY_TYPE_FUZZY);
  // Specify the query
  query.setText("The+efect+of+the+recession+on+consumer+spending");
  ...

 
Top of page

全取得クエリ

説明

全取得クエリ」はすべてのドキュメントを返します。

実装

全取得クエリにはクエリ文字列を指定しませんが、クエリタイプをget allに定義する必要があります。exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような全取得クエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set query type to be "get all"
  query.setQueryType(query.QUERY_TYPE_GETALL);
  ...

注記:   全取得クエリは、デバッグのために提供されています。このクエリではすべてのドキュメントが返されるため、パフォーマンスに影響が与えられます。運用環境では使用しないでください。

 
Top of page

キーワード検索

説明

従来の「キーワード検索」は、検索文字列との一致を検索します。

構文

  word1:+word2:+word3:+... wordN:

  effect:recession:+economic:+slowdown:+consumer:+spending:+buying:

実装

キーワード検索を実装する手順は、次のとおりです。

  1. CMサブシステムのconfig.xmlにあるプロパティcom.sssw.cm.fetch.store.content.repository nameを有効にして、コンテンツのインデックスが作成され、DREに保存されることを確認します。

    For more information    プロジェクトファイルが存在する場所の詳細については、『exteNd Directorアプリケーションの開発』のexteNd Directorプロジェクト構造に関する節を参照してください。

    For more informationこのプロパティの詳細については、ドキュメントコンテンツのDREへのコピーを参照してください。

  2. exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のようなキーワードクエリを設定します。

      ...
      //Instantiate a blank query object
      com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
      // Set query type to be "text"
      query.setQueryType(query.QUERY_TYPE_TEXT);
      // Specify the query
      query.setText("effect:+recession:+consumer:+spending:+buying:");
      ...
    

 
Top of page

正式名検索

説明

固有名詞検索」は、名前が示すように固有名詞を検索します。

構文

  ProperName1+ProperName2+ProperName3+...ProperNameN

  Ralph+Waldo+Emerson

実装

固有名詞検索は、クエリタイプをname searchに定義する必要があるという点を除いて、概念クエリと同じ方法で実装されます。exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような固有名詞検索を設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set query type to be "name search"
  query.setQueryType(query.QUERY_TYPE_NAMESEARCH);
  // Specify the query
  query.setText("Ralph+Waldo+Emerson");
  ...

 
Top of page

近接クエリ

説明

近接クエリ」は、クエリにある特定の複数の単語が、それぞれ隣接している必要があることを指定します。

構文

隣接する単語をまとめて引用符で囲みます。

  word1+\x91 word2+word3\x92 +... wordN

  effect+recession+\x91 economic+slowdown\x92 +\x91 consumer+spending\x92 +\x91 consumer+buying\x92 

用途

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような近接クエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  // Set the query type to be "text"
  query.setQueryType(query.QUERY_TYPE_TEXT);
  // Specify the query
  query.setText("effect+recession+\x91 economic+slowdown\x92 +\x91 consumer+spending\x92 +\x91 consumer+buying\x92 ");
  ...

 
Top of page

類似ドキュメントの提案

説明

類似提案」クエリは、検索条件に関連する他のドキュメントに類似したドキュメントを検索しようとします。

構文

  document-identifier1+document-identifier2+document-identifier3+... document-identifierN

ドキュメントIDは、クエリエンジン(exteNd Director DRE)またはそのURL (DRE参照)のいずれかによりドキュメントに割り当てられたドキュメントIDです。

クエリ式では、ドキュメントIDをドキュメントIDまたはドキュメントURL参照として指定できます。

実装

「類似提案」クエリを実装するには、次の手順を実行します。

  1. setQueryType()メソッドを使用して、クエリタイプをsuggestに設定します。

  2. setSuggestOptions()メソッドを使用して、提案オプションを定義します。

    1. クエリ式に指定するドキュメントIDを、ドキュメントID (DREにより生成)として処理するか、またはドキュメント参照として処理するかを指定します。

    2. クエリ式に指定するドキュメントが、クエリ結果に含まれるかどうかを指定します。

  3. クエリ式を構築します。

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような「類似提案」クエリを設定します。

  ...
  //Get the query engine delegate
  EbiQueryEngineDelegate qe = com.sssw.search.factory.EboFactory.getQueryEngineDelegate();
  
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  
  query.selectAll();
  
  //Set query type to "text" to get documents whose references
  //or IDs can be passed on to the suggest-similar query
  query.setQueryType(com.sssw.search.api.EbiQuery.QUERY_TYPE_TEXT);
  
  //Set query string
  query.setText("economic+recession+effects");
  
  String ids = "";
  
  //Search for documents that meet the original search criteria
  
  try
  {
     Iterator results = qe.runQuery(context, query, null, false).iterator();
  	 //Put together the list of engine document IDs that constitute
  	 //the suggest-similar query
     boolean first = true;
     while (results.hasNext())
     {
        com.sssw.search.api.EbiQueryResult res = (com.sssw.search.api.EbiQueryResult) results.next();
        String engineDocID = res.getProperty(EbiQueryResult.PROP_ENGINE_DOC_ID);
        if (!first)
           ids += "+";
        else
           first = false;
        ids += engineDocID;
     }
  }
  catch (Exception e)
  {
     if (m_log.isError())
        m_log.error(e);
  }
  
  if (!"".equals(ids))
  {
     //Set query type to "suggest"
     query.setQueryType(EbiQuery.QUERY_TYPE_SUGGEST);
     query.setSuggestOptions(true, true);
     query.setText(ids);
     //Run the suggest-similar query
     Iterator results = qe.runQuery(context, query, null, false);
     \x85 
  }

この例では、setSuggestOptions()メソッドが次の内容を指定します。

この例でドキュメントURL参照(ドキュメントIDの代わり)を使用するには、次のステートメントを変更します。

 
Top of page

類義語クエリ

説明

類義語クエリ」は、クエリ式の用語だけでなく、個別の類義語で定義する関連用語(または同義語)も分析します。

類義語クエリを発行するには、次の基本的な手順を実行します。

  1. 検索する用語を決めます。

  2. 各用語に対して、同義語、またはその用語に関連付ける単語を含む類義語ドキュメントを作成します。

  3. クエリ式を構築します。

  4. EbiQueryインタフェースを実装するオブジェクトでsetIsThesaurusQuery()メソッドを呼び出し、類義語クエリとしてクエリを実行します。

  5. 作成する各類義語DREに対してリポジトリ記述子オブジェクトを取得します。

  6. setThesaurus()メソッドをEbiQueryオブジェクトで呼び出し、類義語オプションを設定します。

  7. クエリを実行します。

類義語DRE

検索する各用語について、類義語DREを作成する必要があります(Step 2参照)。この節では、その作成方法について説明します。

注記:   この節の内容は、Autonomy, Incの『Autonomy Server 2.2』マニュアルからの情報に基づいています。

Procedure 類義語DREを作成する

  1. ThesaurusDREという名前のフォルダをAutonomy統合ファイルがインストールされているフォルダに作成します。

    デフォルトでは、Autonomy統合ファイルは次のexteNd Directorインストールディレクトリに保存されます。

      exteNd Director\autonomy
    
  2. 既存のexteNd Director DREからThesaurusDREフォルダにすべてのファイルをコピーします。

    これらのファイルは、次のexteNd Directorインストールディレクトリに保存されます。

      exteNd Director\autonomy\engine
    
  3. ThesaurusDREフォルダで、次のファイルの名前を変更します。

    名前を変更するファイル

    変更後の名前

    DirectorDRE.exe

    ThesaurusDRE.exe

    DirectorDREadmin.exe

    ThesaurusDREadmin.exe

    DirectorDRE.cfg

    ThesaurusDRE.cfg

  4. 次のように、別のポートを参照するようにThesaurusDRE.cfgを編集します。

    名前を変更するファイル

    変更後の名前

    QUERYPORT設定

    QUERYPORT=8000

    INDEXPORT設定

    INDEXPORT=8001

  5. 使い慣れたテキストエディタで、類義語ドキュメントを作成します。

    類義語ドキュメントには、この例のように、改行で区切られた、関連単語のリストが含まれます。

    srcThesaurusDoc

  6. 類義語ドキュメントを保存します。

  7. DRE Administrationコンソールを使用して、類義語ドキュメントを類義語DREにインポートして、インデックス作成します。次の手順に従ってください。

    1. ThesaurusDRE.exeをダブルクリックします。

    2. ThesaurusDREフォルダのThesaurusDREadmin.exeをダブルクリックして、DRE Administrationコンソールと類義語DREを接続します。

      DRE Administrationコンソールウィンドウのチェックマーク記号を確認して、正常に接続されたことを確認します。

      srcDREIsRunningSymbol

    3. [新規データベース名]テキストボックスに「ThesaurusDB」と入力し、[新規データベースの作成]ボタンをクリックして、新しいDREデータベースを作成します。

    4. 警告ボックスが表示されたら、[はい]をクリックして、データベースを作成することを確認します。

    5. [インポート-インデックス]タブを選択します。

    6. [ファイルをIDX形式にインポート]ボタンをクリックします。

      [メインインポート設定]ダイアログが開きます。

    7. [ファイルの追加]ボタンをクリックします。

    8. ブラウズして類義語ドキュメントを選択して、[開く]をクリックします。

      類義語ドキュメントは、インポートする入力ファイルのリストに表示されます。

    9. [ThesaurusDB]を宛先データベースとして選択して、[OK]をクリックします。

    10. [はい]をクリックして、類義語ドキュメントのIDXファイルを、インデックス作成するドキュメントのリストに追加することを確認します。

    11. [DREに今すぐインデックス作成!]をクリックして、類義語ドキュメントのインデックスを作成します。

これで、類義語クエリを実装する準備ができました。

実装

exteNd DirectorコンポーネントのgetComponentData()メソッドで、次のような「類義語」クエリを設定します。

  ...
  //Instantiate a blank query object
  com.sssw.search.api.EbiQuery query = com.sssw.search.factory.EboFactory.getQuery();
  
  //Construct your query expression
  query.setText("feline");
  
  //Mark the query to run as a thesaurus query
  query.setIsThesaurusQuery(true);
  
  //Get a repository descriptor for the thesaurus DRE
  EbiRepositoryDesc thesaurus = com.sssw.search.factory.EboFactory.getRepositoryDesc("141.155.166.181", 8000, 8001, "ThesaurusDB");
  
  //Set thesaurus options
  query.setThesaurus(thesaurus);
  
  //Run the query
  Collection results = queryEngine.runQuery(context, query, repositories, true);
  ...


Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...