メインコンテンツへスキップ

有限会社サイパック

CYPACCYberspace Programming Artists Colony

 

 


FINDSPOT技術情報

FINDSPOT 基本機能


検索エンジンの動作環境

OS: Microsoft Windows 2000/2003/2008/2012/2016/2019 Server、Linux、Solaris、FreeBSD、Mac OS X

メモリ: 2GB (推奨4GB)

ハードディスク: 100GB以上(必要なハードディスク容量は扱う文書のサイズと量で左右されます)

検索エンジンの内部はスレッドにより実装されているので、複数CPUでの利用が効果的です。使用するメモリについては扱う文書の分量や、インデックスの構成により必要な容量が変わります。2GB以上がお勧めです。

使用するハードディスクの容量は扱う文書の分量により変わります。全文検索対象の文書のテキストサイズの9倍程度が必要サイズの目処となります。検索スピードは、ハードディスクの読み込みスピード(ランダムアクセス)に大きく依存しますので、高速なハードディスクの利用をお勧めします。

FINDSPOTでは、全文検索情報以外の書誌情報はSQLのデータベースに保存されます。保存先としてはPostgreSQL、MySQL、SQLiteが利用できます。SQLiteのデータベース機能はFINDSPOTの内部に埋め込まれていますが、PostgreSQLおよびMySQLについては別途インストールしたものを使用します。

先頭に戻る

FINDSPOT サポートする文書形式


FINDSPOTがサポートする文書形式は次の通りです。

Windowsの場合では上記以外でもIFilterの提供されている文書形式であれば、該当するIFilterをサーバにインストールすることで、全文検索の対象にできます。文書形式は該当の文書形式フィルタを用意することで拡張できる構造になっています。

上記以外の文書形式でも、文書フィルタを開発することでFINDSPOTの検索対象にできます。たとえば日本新聞協会で定義している新聞記事をXMLで表現したNewsML形式に対するフィルタを開発し、NewsMLを検索対象とした開発例などがあります。

先頭に戻る

FINDSPOT クライアントインターフェース


FINDSPOTの検索エンジンには次の5つのクライアントインターフェースが用意されています。

  1. 検索サーバとのTCP/IPの通信レベルのインターフェース
  2. C++のクラスライブラリ
  3. 検索コマンド/インデックス作成コマンドなどのEXE実行形式とのインターフェース
  4. 3を呼び出すPerlによるCGI検索インターフェース
  5. 3を呼び出すPHPによるCGI検索インターフェース

1のTCP/IP通信レベルのインターフェースは、通信プロトコルの詳細仕様という形で開発者に対して提供されます。この通信プロトコルの仕様に従う問い合わせプログラムを記述することで検索クライアントが作成できます。この方法はTCP/IPのソケットをサポートするプログラミング言語であればどのような言語でも利用できます。

2のC++クラスライブラリはライブラリとヘッダーファイルがSDKの一部として提供されます。提供されるクラスの内部に通信プロトコルが実装されているので、利用者はTCP/IP通信レベルの実装に悩まされることなく、問い合わせインターフェースを作成することができます。使用できるプログラミング言語はC++に限定されます。

3のEXE実行形式はFINDSPOTの標準的なインストールイメージに含まれています。4および5は、PerlおよびPHPのCGIサンプルコードの形でSDKの一部として提供されます。このサンプルコードを元に、PerlもしくはPHPを使って問い合わせインターフェースを開発することができます。

先頭に戻る

FINDSPOT 検索機能


FINDSPOT持つ検索機能を説明するために、サンプルのPerl CGIが提供している検索機能について説明します。前述のいずれのクライアントインターフェースを使っても、このような検索機能が実現できます。

検索式

FINDSPOTには複数の検索機能が用意されています。複数の検索機能を併用すると容易に目的の文書を見つけることができます。

先頭に戻る

FINDSPOT 文字列


特定の文字列を含む文書を見つける場合には、その文字列をそのまま検索式として指定してください。ただし、文字列が空白文字を含む場合には、文字列全体を”(ダブルクオート)で囲って指定してください。FINDSPOTでは空白文字はANDと同様の意味を持つので注意が必要です。

先頭に戻る

FINDSPOT AND


複数の条件を論理積で指定したい場合には、次のようにANDを用いた検索式を指定します。

この場合は、条件1と条件2の両方の条件を満たす文書を検索します。

3つ以上の条件を満たす文書を検索する場合には、条件をそれぞれANDつないで接続できます。

なお、前述のように、複数の条件の間に空白文字が指定された場合には、FINDSPOTの検索エンジンはANDが指定されたものとして解釈します。

たとえば複数の文字列を持つ文書を検索する場合には、

のように指定します。この場合、文字列1と文字列2の両方を含む文書が検索されます。

先頭に戻る

FINDSPOT OR


複数の条件を論理和で指定したい場合には、次のようにORを用いた検索式を指定します。

この場合は、条件1もしくは条件2を満たす文書を検索します。

3つ以上の条件の論理和を満たす文書を検索する場合には、条件をそれぞれORでつないで接続できます。

先頭に戻る

FINDSPOT NOT


特定の条件を満たさない文書を検索するにはNOTを使用します。

この場合は条件1を満たすが条件2を満たさない文書が検索されます。

先頭に戻る

FINDSPOT ( )


前述のAND, OR, NOTによる論理式は複数の論理を組み合わせて検索式を組み立てることができます。検索式の論理演算では暗黙の優先順位は

のように指定された場合次のようになります。

検索式がこの暗黙の優先順位では意味が違ってしまう場合には明示的に()を補って論理式の演算順位を示します。たとえば検索式を次のように指定したとします。

この検索式は「織田信長」を含む文書もしくは「豊臣秀吉」と「戦国時代」の両方を含む文書を検索するという意味になります。

「織田信長」もしくは「豊臣秀吉」を含み、かつ「戦国時代」を含む文書を検索したい場合には次のように()を補う必要があります。

先頭に戻る

FINDSPOT NEAR, ADJ


検索式の中にNEARもしくはADJを用いた式を入れることができます。

NEAR、ADJは、AND検索と動作が似ていますが、文字列と文字列との距離を制限できる点が異なります。

FINDSPOTでサポートしているNEAR, ADJ演算子は次の通りです。

“文字列”は全文検索対象のフィールドのいずれかに文字列の値が含まれることを示します。上記のn, mには整数値を指定します。

NEARもしくはADJの左右には文字列もしくはNEAR、ADJの検索式しか記述できないという制約があります。NEARもしくはADJの左右にはプロパティ検索や、()で囲った別の検索式などは指定できません。

NEARもしくはADJで引数が省略された場合にはデフォルトの値が用いられます。デフォルト値は検索システムの設定によって変更が可能です。

先頭に戻る

FINDSPOT プロパティ指定


FINDSPOTでは、検索対象となる文書のプロパティや特定フィールドの値についても条件として指定できます。このような条件をプロパティ指定と呼びます。プロパティ指定の条件には次のような構文を使用します。

以上の指定方法は全文検索対象として指定されているプロパティについてのみ使用できます。

この完全一致のプロパティ指定はどのようなプロパティに対しても指定可能です。

この2つのプロパティ指定は、全文検索対象以外のプロパティについて指定できます。

比較演算子としては、<, >, <=, >=が使用できます。

<はプロパティの値が指定文字列よりも小さいことを意味します。 >はプロパティの値が指定文字列よりも大きいことを意味します。

<=はプロパティの値が指定文字列以下であることを意味します。 >=はプロパティの値が指定文字列以上であることを意味します。

プロパティ名については、文書に対してどのようなプロパティを設けてインデックスを作成したかに依存します。全文検索対象であるか否かについても、インデックス作成時の設定に依存します。プロパティ名の一覧や、全文検索対象であるかどうかについてはインデックスの設定ファイルを確認してください。

FINDSPOTのデフォルトのプロパティとしては次のようなものが用意されています。

先頭に戻る

FINDSPOT 曖昧検索


FINDSPOTでは、文字列を検索する際に指定文字列が完全に一致していなくても、検索結果に含めることができます。この機能を曖昧検索と呼んでいます。曖昧検索を行なうには、検索フォームにある「曖昧検索」チェックボックスをチェックしておき検索を行ないます。

曖昧検索を行なうと次のような5つのバリエーションについても検索結果に含めることができるようになります。

部分文字列

文字の挿入

文字の欠落

文字の置換

複合パターン

指定した文字列の半分以上の長さの文字列が、指定した文字列の倍の長さの文字列に収まっていること(50%以上の合致)を曖昧さの判定基準としています。

先頭に戻る

FINDSPOT デフォルト検索対象プロパティ指定


前述のプロパティ指定の機能を使えば、特定のプロパティに特定の文字列が含まれる文書を検索できます。しかし、AND, OR, NOTなどを多用した複合的な検索式の場合、プロパティ指定機能を使って検索式を組み立てると、通常かなり複雑な検索式になってしまいます。

たとえば、titleとbodyのプロパティのいずれかに、「選挙演説」と「東京都」が含まれている文書を検索する場合、プロパティ指定機能を使って記述すると、次のような検索式になります。

これを、デフォルトの検索対象プロパティ指定機能を使って表現すると、次のような検索式になります。

デフォルトの検索対象プロパティ指定機能を使うと、検索式の作成負担が減るばかりでなく、検索時間も高速に処理できるメリットがあります。

先頭に戻る

FINDSPOT 検索結果のソート


FINDSPOTでは検索結果の表示順を自由に指定できます。並び順については特定のプロパティについて降順、昇順の指定ができるほか、複数のソートキー(プロパティ)を指定して結果の並び順を指定することができます。

FINDSPOTでは大量の検索結果がヒットした場合に、即座に検索クライアントに対してレスポンスを返すため、特定の件数以上ヒットした場合には、検索結果のソートを行わないシステム設定が用意されています。システム構成により検索結果のソートの処理スピードは異なりますが、このソート上限を5千件から1万件程度に設定して運用されることをお勧めします。

先頭に戻る

FINDSPOT 検索結果


検索結果については次のような機能が提供されます。

表示件数

一度に表示する検索結果の件数は、検索フォームの「表示件数」のフィールドで指定できます。

検索結果の表示画面では次ページ、前ページ、トップページのリンクをクリックすることで、ぞれぞれ次ページの結果、前ページの結果、最初のページの結果の検索結果表示画面に移動できます。

検索結果の表示順

検索結果の表示順は検索フォームの「表示順」により指定できます。

指定可能な順序は、ヒット順、サイズ順、日付時刻順、ファイル名順、ヒット逆順、サイズ逆順、日付時刻逆順、ファイル名逆順のいずれかです。なお、CGIをカスタマイズすることで、特定の文書プロパティの順番で検索結果を表示することも可能ですので、CGIがカスタマイズされている場合には他の指定順の指定も可能になります。

強調表示

検索結果には、検索式で入力した文字列が文書のどの部分で検索されたのかが強調表示されます。曖昧検索で一致した内容については強調表示されません。

先頭に戻る

FINDSPOT 文字の一対一置換機能


FINDSPOTはインデックスを生成する前や、全文検索を行う直前に文字を一対一で置換する機能があります。この機能を用いると、次のような機能が実現できます。

先頭に戻る

FINDSPOT 検索アルゴリズム


FINDSPOTはN-gramのアルゴリズムを使い、インデックス等の内部構造をUnicodeの文字コードを用いて実装しているのが大きな特徴です。特定の言語に依存せず、形態素解析やそのための辞書が不要な検索エンジンです。また、辞書や形態素解析のロジックに影響されずに全文検索が行なえるため、確実に目的の表現を含む情報を検索することができます。

形態素解析を行なう全文検索エンジンは、辞書に存在しない用語や人名、地名などが存在すると、単語の途中を本来区切るべきではない場所で文字列を区切り別々の形態素として扱ったり、隣接する本来別の形態素を一固まりの形態素として扱いインデックスを生成してしまうことがあります。形態素解析を行なう全文検索エンジンには本文には実在するのに、検索してみると該当箇所が見つからないことがありえます。この問題に対処するには、形態素解析の性能を高める努力や、専門性の高い目的分野ごとの辞書を用意するなどの施策が必要です。しかし日々新たな専門用語が生まれるような分野や、組織内で独自の用語を用いているような場合には、専用辞書の保守や、形態素解析のロジックの修正に多大な労力が強いられてしまいます。また、形態素解析のための文法解析ロジックが特定の言語に束縛されるため、対応できる言語が特定の言語に縛られてしまいます。

一方、N-gramのアルゴリズムは、隣接する複数文字の並びを機械的に全てインデックスの単位として処理します。FINDSPOTは1文字と2文字の並びを単位としてインデックスを生成しています。N-gramのアルゴリズムはインデックスを作成する対象の文章情報に対して文法解析をまったく行なわず、1文字と2文字の並びを単位として総当たりでインデックスを生成します。このため、文中に現れるどのようなフレーズであっても確実に完全一致の検索が行なえます。また、FINDSPOTならば1つのインデックスによってUnicodeで表現可能な日本語、英語、中国語、韓国語、ドイツ語、フランス語などの言語でも検索できます。

N-gramには、インデックスのサイズが大きくなる、活用語尾の変化に対応した検索ができない、「京都」と検索したのに「東京都」も検索されてしまうという3つの問題があります。

一般に、形態素解析を行なう場合と比べ、N-gramのインデックスはひとまわり大きなサイズが必要です。形態素解析と比べると大きなインデックスのサイズになるのは確かにデメリットであり、この大きなインデックス情報を適切に扱うのが難しいため、これまでN-gram方式が敬遠されてきたものと思われます。しかし技術の発達により現在は数百Gから数Tのハードディスクを持ち、数Gのメモリを搭載したコンピュータを使用して全文検索を行なうことはそれほど困難ではありません。インデックスサイズに関する物理的な障壁はすでに大きな問題ではありません。FINDSPOTは、コンピュータに多くのメモリが搭載されていることを前提に、インデックス単位のラベルをメモリ上に持つことで、高速なインデックスの生成や検索を行なえるソフトウェアを実現しました。

活用語尾の問題については、英語のような言語では大きな問題になりますが、日本語に関してはほとんど問題になりません。FINDSPOTではこのような問題に対処するために曖昧検索という機能を設けています。曖昧検索を用いると、利用者の入力した検索文字列に対して50%以上適合した表現を検索結果とすることができます。曖昧検索を用いれば、漢字の言葉に対する送りのゆれ、表記のゆれなどにも対応できます。

京都と東京都の問題はN-gramの宿命ともいえる問題です。しかし、実際に検索エンジンを使用してみると、この問題が気になるケースはあまり多くありません。ノイズが気になる場合には、「京都 NOT 東京都」と検索式を指定して絞り込みを行なうことで回避できます。

先頭に戻る

FINDSPOT 書誌情報


FINDSPOTは全文検索対象となる本文以外に、検索対象に対するさまざまな書誌情報を同時に扱えます。書誌情報としてはデフォルトで文書の作成日時、所有者、URIなどがありますが、その他にも利用したい書誌情報を自由に追加設定できます。設定を行なうには、インデックスの定義ファイルの中に書誌情報の詳細な型情報を指定します。

書誌情報は、全文検索対象として指定することもできますし、単に結果を取り出すための目的、検索結果の並び順を指定する目的、単純な完全一致検索などに使用できます。

書誌情報は、インデックスをかける際にFINDSPOT独自のXML形式に埋め込んで検索エンジンに渡されます。

先頭に戻る


Copyright ©2022 有限会社サイパック CYPAC All Rights Reserved.