XPagesでNotes文書検索サイトを作成する---その1

XPagesでNotes文書検索サイトを作成する---その2

 

こんばんはおねがい

前回は、指定したDBを対象とした文書検索でした。
今回は、複数のDBを対象とした文書検索に改造してみたいと思います。


まず、今回のポイントになるSSJSですニコニコ

前回、ボタンコントロールに書き込んだSSJSの一部です。

この場所で対象の文書を検索してviewScopeに代入しています。

 

単純に考えるとviewScopeにどんどん追加されていけばいいとわかりますので、
思い切ってこの部分を外に出してみたいと思います。

 

1)コード > スクリプトライブラリ > 新規スクリプトライブラリをクリックします。

 

新規スクリプトライブラリが作成できます。

タイプ(T)を「サーバーJavaScript」に変更してから

名前(N)を入力します。

 

筆者はsearchにしました。

 

そして以下のFunctionを追加してみました。

少し雑なものですがソースも載せておきます。

function querySearch(dbname,v,query,FieldName,BodyName){
/*Anonymous用検索エンジン
 * 第1引数:DBのファイル名、第2引数:検索対象View名、第3引数:検索文字、第4引数:検索結果表示フィールド、第5引数:本文表示フィールド
 *
 */
    try {
        var server = database.getServer();
        var searchDatabase:NotesDatabase = session.getDatabase(server,dbname);
        //対象DBにインデックスがない場合は作成する
        if(searchDatabase.isFTIndexed()){
            searchDatabase.updateFTIndex(false);
        }else{
            searchDatabase.createFTIndex(0,true);
        };
        //Viewを取得し、Viewに表示されている文書を全件取得する
        var v:NotesView = searchDatabase.getView(v);
        var vec:NotesViewEntryCollection = v.getAllEntries();
                
        //全文検索        
        vec.FTSearch(query);
        
        var entry:NotesViewEntry = vec.getFirstEntry();
        var cnt = vec.getCount();
                
        //検索結果をviewScopeに入れる
        while (entry != null) {
            
            var text:String = entry.getDocument().getFirstItem(BodyName).getText(256);
            
            viewScope.list.push([entry.getFTSearchScore().toFixed(),
                                 searchDatabase.getFilePath(),
                                 searchDatabase.getTitle(),
                                 entry.getDocument().getItemValueString(FieldName).toString(),
                                 entry.getDocument().getUniversalID(),
                                 text]);
        
        
        var tmpEntry = vec.getNextEntry(entry)
        entry.recycle();
        entry = tmpEntry;
    }

    return viewScope.list;
     }catch(e){
        //エラーの処理
    }
}

 

ここまで出来ましたらスクリプトライブラリを保存します。

 

2)前回検索用のUIで利用したXPageを開きます。

先ほど作成したスクリプトライブラリを追加します。

 

XPage > リソース > 追加を選択し、「JavaScriptライブラリ」を選択します。

 

作成したJavaScriptライブラリが表示されるので、選択して[OK]をクリックします。

 

次にボタンコントロールを選択し、イベント>マウス onclick > サーバータグ > スクリプトエディタを選択してSSJSを変更します。

5行目:全角スペースを半角スペースに置き換えています。

8行目から20行目:半角スペースをANDに置き換えています。

 

24行目・25行目:今回外だししたSSJSを呼び出しています。

 

29行目から33行目:スコア降順に並び替えています。

 

ここまで出来ましたらXPageを保存し、動作確認をしてみます。

 

テストに利用するDBは・・・

TestDataA.nsf

 

discussionA.nsf

 

この2つを対象にしてみたいと思います。

 

検索文字を入力します。今回は・・・「ジョージ」にします。

 

検索結果です。3件出てきました照れ

 

赤枠の場所を見ていただくとお分かりになると思いますが、違うDBから文書情報を取得しているのがわかりますでしょうか??

スクリプトライブラリ内の条件式(今回だとANDにしているところ)を

工夫していくと検索結果はどんどん増えていくので、試してみてはいかがでしょうか??

 

 

では今日はこの辺で・・・パー

 

 

ちょっと早いけど、明日も頑張れ!サッカー日本代表っサッカー

 

AD