2019年9月10日火曜日

V11 の DQL はさらに進化!全文索引の検索も可能に!

Notes/Domino の次期バージョンであるV11のベータプログラムが始まりました。

https://hcljapan.co.jp/software/blog/hcl-notes-domino-v11-beta-started

私もさっそくWindows版のNotesとDominoをダウンロードして、試しているところです。

このベータで私が最も注目している機能のひとつに「DQLの拡張」があります。

DQL は V10 の新機能として追加された、データベースの文書へアクセスするための新たな枠組みです。V10 では NSFサーチ(文書のサマリーフィールド)とビューを検索できるのみで、サマリーフィールドでもないしビューにも表示できない「リッチテキストフィールド」の内容は、検索できませんでした。

V11 ではこれが改善され、全文索引を検索するためのクエリーを書くことができようになりました。全文索引にはリッチテキストフィールドのテキストも含むので、リッチテキストの中も検索できるようになるようです。添付ファイルを全文索引に含める設定をしていれば、サポートされているファイル形式のファイルにあるテキストも検索できそうです。


DQL では、検索する際に使うもの(サマリーフィールド or ビュー or 全文索引)がクエリーの書き方で変わります。


クエリーの例をいくつか挙げます。


たとえば、件名が"Request"のメールを探したい場合、

Subject = 'request'

とすると、データベース内の Subject という名前のサマリーフィールドから値が一致するもの探します。※このとき Subject でソートできるビューがDQLで使える仕様になっていればビューから探す場合もあります

検索に「All」ビューを使いたい場合、明示的にビュー名を指定することも可能です。

'All'.Subject = 'request'

このようにビューを検索で使う場合、Subject 列(Subjectは列のプログラム名)が最も左にあるソートされた列である、または Subject 列にクリックソートが設定されていることが必要です。

テクてくで発表した資料で示したとおり、NSFサーチ(サマリーフィールド)よりもビューを使った検索のほうがパフォーマンスは良好でした。


ここまで(これはほんの一部です)が V10 の DQL で使えた構文です。


V10 までは、フィールドまたはビュー列と、指定した値とが完全に一致する場合のみヒットしましたが、V11 では全文索引を使ってこれまでより柔軟な検索ができるようになりそうです。

V11 以降の DQL で全文索引を使うには、クエリーに Contains を用います。

たとえば先の例を、全文索引を使うよう書き換える場合、

Subject Contains ('request')

となります。ただし V10 では Subject の値が Complicated request の場合はヒットしませんでしたが、Contains を使えばヒットします。検索バーから全文検索する場合と違い、DQL では = と Contains は同じではないので注意が必要です。

それから、全文索引を使う場合には、アスタリスク * やクエスチョンマーク ? といったワイルドカードが使えます。

先の例では、件名が [Request] や REQUEST: といった文字列はヒットしますが、 Req: や はヒットしません。
もし Request 以外にも Req: や といった文言も検索したい場合、

Subject Contains ('req*')

とします。

クエスチョンマークは任意の1文字を表す場合に使います。例えば、'r??t' とすると root や REST はヒットしますが request はヒットしません。

また、件名だけでなく、本文など他のフィールドも含めて検索させたい場合、

Contains ('req*')

のように、フィールド名を指定せずに Contains を用いることで、全文索引にあるすべてのフィールドを対象として探すことができます。


さらに、複数の文言のどれかを含む文書を探したい場合は

Contains ('req*', 'server', 'replica')

のように括弧の中にカンマ区切りで指定できます。
また、

Contains all ('req*', 'server', 'replica')

のように contains の直後に all を加えることで、複数の文言のすべてを含む文書を探すことができます。


なお、前回のエントリで話題にしました「読者フィールドを使って閲覧制限した文書が全文検索にヒットする」事象は、DQL で全文索引を用いる場合にも同様であることを本ベータでは確認しました。※NSF サーチやビューを使った場合はヒットしません


V11 の DQL ではこういった構文の拡張の他、パフォーマンスのさらなる向上や、DQL準拠のビューを自動作成するといったプランもあるようです。次のリンクを参照ください。

https://www.cwpcollaboration.com/uploads/1/0/2/7/102707030/domino_app_dev__cr_.pdf

まだ未検証ですが、パフォーマンスについて書かれた12ページのグラフを見ると、検索スピードが物凄く速くなるようです。

さらに V11 の先には、複数のデータベースを対象にしたクエリーの拡張も計画にあるようですね。

今後の DQL にも注目していきたいと思います。

0 件のコメント:

コメントを投稿