![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第12章
この章では、exteNd Director SearchサブシステムでサポートされているAutonomyベースクエリのタイプおよびこれらを実装する方法について説明します。
説明するクエリは、次のとおりです。
説明
「ブールクエリ」は、論理演算子を使用して、検索結果を調整します。
構文
word1+LOGICAL OPERATOR+word2+LOGICAL OPERATOR+word3+LOGICAL OPERATOR+... wordN
論理演算子の優先順位(降順)は、次のとおりです。
括弧を使用して、演算子およびオペランドをまとめることができます。
例
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"); ...
説明
「概念クエリ」は、意味により関連付けられるコンテンツ、および検索条件との関連度でランクが付けられたコンテンツを返します。クエリ文字列は、できるだけ特定のものにしてください。通常、段落または少なくとも文章を使用します。
構文
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"); ...
説明
「フィールドクエリ」は、ドキュメントのメタデータ、またはメタデータおよびコンテンツを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の調査研究をすべて検索する場合、次の手順を実行します。
String fieldSpecList = "fnameDOCTYPENAME=*Research Study*+fnameTopic=*Economy*";
String fieldBooleanExpr = "fnameDOCTYPENAME+AND+fnameTopic";
これらの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回のコールでコンテンツおよびメタデータの両方を検索できるため、強力な機能です。
説明
「あいまいクエリ」は、スペルが間違っている場合でも用語を一致させようとします。
実装
あいまいクエリは、クエリタイプを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"); ...
説明
「全取得クエリ」はすべてのドキュメントを返します。
実装
全取得クエリにはクエリ文字列を指定しませんが、クエリタイプを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); ...
注記: 全取得クエリは、デバッグのために提供されています。このクエリではすべてのドキュメントが返されるため、パフォーマンスに影響が与えられます。運用環境では使用しないでください。
説明
従来の「キーワード検索」は、検索文字列との一致を検索します。
構文
word1:+word2:+word3:+... wordN:
例
effect:recession:+economic:+slowdown:+consumer:+spending:+buying:
実装
キーワード検索を実装する手順は、次のとおりです。
CMサブシステムのconfig.xmlにあるプロパティcom.sssw.cm.fetch.store.content.repository nameを有効にして、コンテンツのインデックスが作成され、DREに保存されることを確認します。
プロジェクトファイルが存在する場所の詳細については、『exteNd Directorアプリケーションの開発』のexteNd Directorプロジェクト構造に関する節を参照してください。
このプロパティの詳細については、ドキュメントコンテンツのDREへのコピーを参照してください。
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:"); ...
説明
「固有名詞検索」は、名前が示すように固有名詞を検索します。
構文
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"); ...
説明
「近接クエリ」は、クエリにある特定の複数の単語が、それぞれ隣接している必要があることを指定します。
構文
隣接する単語をまとめて引用符で囲みます。
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 "); ...
説明
「類似提案」クエリは、検索条件に関連する他のドキュメントに類似したドキュメントを検索しようとします。
構文
document-identifier1+document-identifier2+document-identifier3+... document-identifierN
ドキュメントIDは、クエリエンジン(exteNd Director DRE)またはそのURL (DRE参照)のいずれかによりドキュメントに割り当てられたドキュメントIDです。
例
クエリ式では、ドキュメントIDをドキュメントIDまたはドキュメントURL参照として指定できます。
実装
「類似提案」クエリを実装するには、次の手順を実行します。
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の代わり)を使用するには、次のステートメントを変更します。
String engineDocID = res.getProperty(EbiQueryResult.PROP_ENGINE_DOC_ID);
String engineDocID = res.getProperty(EbiQueryResult.PROP_ENGINE_DOC_REF);
query.setSuggestOptions(true, true);
query.setSuggestOptions(false, true);
説明
「類義語クエリ」は、クエリ式の用語だけでなく、個別の類義語で定義する関連用語(または同義語)も分析します。
類義語クエリを発行するには、次の基本的な手順を実行します。
類義語DRE
検索する各用語について、類義語DREを作成する必要があります(Step 2参照)。この節では、その作成方法について説明します。
注記: この節の内容は、Autonomy, Incの『Autonomy Server 2.2』マニュアルからの情報に基づいています。
ThesaurusDREという名前のフォルダをAutonomy統合ファイルがインストールされているフォルダに作成します。
デフォルトでは、Autonomy統合ファイルは次のexteNd Directorインストールディレクトリに保存されます。
exteNd Director\autonomy
既存のexteNd Director DREからThesaurusDREフォルダにすべてのファイルをコピーします。
これらのファイルは、次のexteNd Directorインストールディレクトリに保存されます。
exteNd Director\autonomy\engine
ThesaurusDREフォルダで、次のファイルの名前を変更します。
名前を変更するファイル |
変更後の名前 |
---|---|
DirectorDRE.exe |
ThesaurusDRE.exe |
DirectorDREadmin.exe |
ThesaurusDREadmin.exe |
DirectorDRE.cfg |
ThesaurusDRE.cfg |
次のように、別のポートを参照するようにThesaurusDRE.cfgを編集します。
名前を変更するファイル |
変更後の名前 |
---|---|
QUERYPORT設定 |
QUERYPORT=8000 |
INDEXPORT設定 |
INDEXPORT=8001 |
使い慣れたテキストエディタで、類義語ドキュメントを作成します。
DRE Administrationコンソールを使用して、類義語ドキュメントを類義語DREにインポートして、インデックス作成します。次の手順に従ってください。
ThesaurusDREフォルダのThesaurusDREadmin.exeをダブルクリックして、DRE Administrationコンソールと類義語DREを接続します。
DRE Administrationコンソールウィンドウのチェックマーク記号を確認して、正常に接続されたことを確認します。
[新規データベース名]テキストボックスに「ThesaurusDB」と入力し、[新規データベースの作成]ボタンをクリックして、新しいDREデータベースを作成します。
[はい]をクリックして、類義語ドキュメントのIDXファイルを、インデックス作成するドキュメントのリストに追加することを確認します。
これで、類義語クエリを実装する準備ができました。
実装
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 ...