
findspot n.【考古学用語】遺物、埋蔵品などの発見地(点)、出土地(点)
FINDSPOT ™
FINDSPOTは有限会社サイパックで開発した全文検索エンジンです。Unicodeの情報を扱える高速な全文検索エンジンであり、情報検索、文書管理、辞書や用語集管理などのさまざまな分野で利用できます。
特徴
・操作性やエンジンの動作まで含むカスタマイズ性を重視した柔軟なソフトウェア構成
・様々な検索式をサポート
・複数言語を検索可能
・複数のプラットホームで動作する
動作環境
FINDSPOTの動作環境は次の通りです。
OS: Microsoft Windows 2000/2003 Server、Linux、Solaris、FreeBSD、Mac OS X
メモリ: 2GB (推奨4GB)
ハードディスク: 100GB以上(必要なハードディスク容量は扱う文書のサイズと量で左右されます)
使用するメモリについては扱う文書の分量に依存しますが、2GB以上がお勧めです。
動作例
FINDSPOTを使ったインターネットに公開されている検索システムの例として財団法人日本リハビリテーション協会様の検索ページがあります。次のURLで表示されるページにてFINDSPOTの全文検索が行えます。
http://www.jsrpd.jp/
OEMライセンス販売等
弊社では、FINDSPOTをお客様にOEMライセンスを販売しています。また、現在のFINDSPOTでは対応できない機能の追加開発、検索エンジンを含むシステム開発、技術サポートなどについても承っております。
詳しくは電子メール cypac###cypac.co.jp (###を@に置き換えてください)までお問い合わせください。
検索エンジンを作る
FINDSPOTの紹介記事を「検索エンジンを作る」という題でgikyo.jpにて連載しています。
gihyo.jp
第20回 転置インデックスの実装(その2)
第19回 転置インデックスの実装
第18回 プロパティ検索式の最適化ポイント
第17回 プロパティ検索式の最適化
第16回 テキスト情報の抽出[その3]
第15回 テキスト情報の抽出[その2]
第14回 テキスト情報の抽出[その1]
第13回 検索結果の表示
第12回 近接検索機能
第11回 文書プロパティの検索
第10回 文書プロパティと文書フィルタ
第9回 検索と論理式[その2]
第8回 検索と論理式
第7回 曖昧検索機能
第6回 N-gramと形態素解析との比較
第5回 N-gramのしくみ
第4回 形態素解析のしくみ
第3回 商用検索エンジンの開発へ
第2回 飛行機の中で
第1回 こんな検索エンジンが欲しい!
FINDSPOT全文検索エンジンとは
FINDSPOT全文検索エンジンは有限会社サイパックが開発する全文検索エンジンです。Unicodeの情報を扱える高速な全文検索エンジンであり、情報検索、文書管理、辞書や用語集管理などのさまざまな分野で利用できます。
基本機能
検索エンジンの動作環境は次の通りです。
OS: Microsoft Windows 2000/2003 Server、Linux、Solaris、FreeBSD、Mac OS X
メモリ: 2GB (推奨4GB)
ハードディスク: 100GB以上(必要なハードディスク容量は扱う文書のサイズと量で左右されます)
検索エンジンの内部はスレッドにより実装されているので、複数CPUでの利用が効果的です。使用するメモリについては扱う文書の分量や、インデックスの構成により必要な容量が変わります。2GB以上がお勧めです。
使用するハードディスクの容量は扱う文書の分量により変わります。全文検索対象の文書のテキストサイズの9倍程度が必要サイズの目処となります。検索スピードは、ハードディスクの読み込みスピード(ランダムアクセス)に大きく依存しますので、高速なハードディスクの利用をお勧めします。
FINDSPOTでは、全文検索情報以外の書誌情報はSQLのデータベースに保存されます。保存先としてはPostgreSQL、MySQL、SQLiteが利用できます。SQLiteのデータベース機能はFINDSPOTの内部に埋め込まれていますが、PostgreSQLおよびMySQLについては別途インストールしたものを使用します。
サポートする文書形式
FINDSPOTがサポートする文書形式は次の通りです。
・テキストファイル (専用フィルタを使用)
・HTML (IFilterもしくは、専用フィルタを使用)
・Microsoft Word (IFilterを使用)
・Microsoft Excel (IFilterを使用)
・Microsoft PowerPoint (IFilterを使用)
・PDF (IFilterを使用)
・一太郎 (IFilterを使用)
Windowsの場合では上記以外でもIFilterの提供されている文書形式であれば、該当するIFilterをサーバにインストールすることで、全文検索の対象にできます。文書形式は該当の文書形式フィルタを用意することで拡張できる構造になっています。
上記以外の文書形式でも、文書フィルタを開発することでFINDSPOTの検索対象にできます。たとえば日本新聞協会で定義している新聞記事をXMLで表現したNewsML形式に対するフィルタを開発し、NewsMLを検索対象とした開発例などがあります。
クライアントインターフェース
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持つ検索機能を説明するために、サンプルのPerl CGIが提供している検索機能について説明します。前述のいずれのクライアントインターフェースを使っても、このような検索機能が実現できます。
検索式
FINDSPOTには複数の検索機能が用意されています。複数の検索機能を併用すると容易に目的の文書を見つけることができます。
文字列
特定の文字列を含む文書を見つける場合には、その文字列をそのまま検索式として指定してください。ただし、文字列が空白文字を含む場合には、文字列全体を"(ダブルクオート)で囲って指定してください。FINDSPOTでは空白文字はANDと同様の意味を持つので注意が必要です。
AND
複数の条件を論理積で指定したい場合には、次のようにANDを用いた検索式を指定します。
条件1 AND 条件2
この場合は、条件1と条件2の両方の条件を満たす文書を検索します。
3つ以上の条件を満たす文書を検索する場合には、条件をそれぞれANDつないで接続できます。
条件1 AND 条件2 AND 条件3 ...
なお、前述のように、複数の条件の間に空白文字が指定された場合には、FINDSPOTの検索エンジンはANDが指定されたものとして解釈します。
たとえば複数の文字列を持つ文書を検索する場合には、
文字列1 AND 文字列2
のように指定します。この場合、文字列1と文字列2の両方を含む文書が検索されます。
OR
複数の条件を論理和で指定したい場合には、次のようにORを用いた検索式を指定します。
条件1 OR 条件2
この場合は、条件1もしくは条件2を満たす文書を検索します。3つ以上の条件の論理和を満たす文書を検索する場合には、条件をそれぞれORでつないで接続できます。
条件1 OR 条件2 OR 条件3 ...
NOT
特定の条件を満たさない文書を検索するにはNOTを使用します。
条件1 NOT 条件2
この場合は条件1を満たすが条件2を満たさない文書が検索されます。
( )
前述のAND, OR, NOTによる論理式は複数の論理を組み合わせて検索式を組み立てることができます。検索式の論理演算では暗黙の優先順位は
条件1 論理記号 条件2 論理記号 条件3
のように指定された場合次のようになります。
条件1 論理記号 ( 条件2 論理記号 条件3 )
検索式がこの暗黙の優先順位では意味が違ってしまう場合には明示的に()を補って論理式の演算順位を示します。たとえば検索式を次のように指定したとします。
織田信長 OR 豊臣秀吉 AND 戦国時代
この検索式は「織田信長」を含む文書もしくは「豊臣秀吉」と「戦国時代」の両方を含む文書を検索するという意味になります。「織田信長」もしくは「豊臣秀吉」を含み、かつ「戦国時代」を含む文書を検索したい場合には次のように()を補う必要があります。
( 織田信長 OR 豊臣秀吉 ) AND 戦国時代
NEAR, ADJ
検索式の中にNEARもしくはADJを用いた式を入れることができます。
NEAR、ADJは、AND検索と動作が似ていますが、文字列と文字列との距離を制限できる点が異なります。
FINDSPOTでサポートしているNEAR, ADJ演算子は次の通りです。
- "A" NEAR "B" 順序を問わずA,Bの文字列が出現し、その距離が規定値以下である文書を検索
- "A" NEAR<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字値以下である文書を検索
- "A" NEAR<n, m> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字以上m字以下である文書を検索
- "A" NEAREQ<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字である文書を検索
- "A" NEARNE<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字でない文書を検索
- "A" NEARLT<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字より小さい文書を検索
- "A" NEARLE<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字以下の文書を検索
- "A" NEARGT<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字より大きい文書を検索
- "A" NEARGE<n> "B" 順序を問わずA,Bの文字列が出現し、その距離がn字以上の文書を検索
- "A" ADJ "B" A,Bの順で文字列が出現し、その距離がデフォルト値以下である文書を検索
- "A" ADJ<n> "B" A,Bの順で文字列が出現し、その距離がn字値以下である文書を検索
- "A" ADJ<n, m> "B" A,Bの順で文字列が出現し、その距離がn字以上m字以下である文書を検索
- "A" ADJEQ<n> "B" A,Bの順で文字列が出現し、その距離がn字である文書を検索
- "A" ADJNE<n> "B" A,Bの順で文字列が出現し、その距離がn字でない文書を検索
- "A" ADJLT<n> "B" A,Bの順で文字列が出現し、その距離がn字より小さい文書を検索
- "A" ADJLE<n> "B" A,Bの順で文字列が出現し、その距離がn字以下の文書を検索
- "A" ADJGT<n> "B" A,Bの順で文字列が出現し、その距離がn字より大きい文書を検索
- "A" ADJGE<n> "B" A,Bの順で文字列が出現し、その距離がn字以上の文書を検索
"文字列"は全文検索対象のフィールドのいずれかに文字列の値が含まれることを示します。上記のn, mには整数値を指定します。
NEARもしくはADJの左右には文字列もしくはNEAR、ADJの検索式しか記述できないという制約があります。NEARもしくはADJの左右にはプロパティ検索や、()で囲った別の検索式などは指定できません。
NEARもしくはADJで引数が省略された場合にはデフォルトの値が用いられます。デフォルト値は検索システムの設定によって変更が可能です。
プロパティ指定
FINDSPOTでは、検索対象となる文書のプロパティや特定フィールドの値についても条件として指定できます。このような条件をプロパティ指定と呼びます。プロパティ指定の条件には次のような構文を使用します。
- [プロパティ名 "文字列"] 特定のプロパティに文字列を含むことを示します。
- [プロパティ名 ^ "文字列"] 特定のプロパティが指定文字列で始まることを示します。
- [プロパティ名 $ "文字列"] 特定のプロパティが指定文字列で終ることを示します。
以上の指定方法は全文検索対象として指定されているプロパティについてのみ使用できます。
- [プロパティ名 = "文字列"] 特定のプロパティが指定文字列の値(完全一致)であることを示します。
この完全一致のプロパティ指定はどのようなプロパティに対しても指定可能です。
- [プロパティ名 比較演算子 "文字列"] 特定のプロパティの値と指定文字列を比較します。
[プロパティ名 比較演算子 "文字列1" 比較演算子 "文字列2"]
特定のプロパティの値を2つの指定文字列との間で比較します。
この2つのプロパティ指定は、全文検索対象以外のプロパティについて指定できます。
比較演算子としては、<, >, <=, >=が使用できます。
<はプロパティの値が指定文字列よりも小さいことを意味します。
>はプロパティの値が指定文字列よりも大きいことを意味します。
<=はプロパティの値が指定文字列以下であることを意味します。
>=はプロパティの値が指定文字列以上であることを意味します。
プロパティ名については、文書に対してどのようなプロパティを設けてインデックスを作成したかに依存します。全文検索対象であるか否かについても、インデックス作成時の設定に依存します。プロパティ名の一覧や、全文検索対象であるかどうかについてはインデックスの設定ファイルを確認してください。
FINDSPOTのデフォルトのプロパティとしては次のようなものが用意されています。
- doctype 文書形式
- date 日付
- date2 日付2
- person 人名
- person2 人名2
- group グループ名
- group2 グループ名2
- title タイトル
- body 本文
曖昧検索
FINDSPOTでは、文字列を検索する際に指定文字列が完全に一致していなくても、検索結果に含めることができます。この機能を曖昧検索と呼んでいます。曖昧検索を行なうには、検索フォームにある「曖昧検索」チェックボックスをチェックしておき検索を行ないます。
曖昧検索を行なうと次のような5つのバリエーションについても検索結果に含めることができるようになります。
・部分文字列
検索文字列「台風の被害」で「台風の」を含む文書もヒット
検索文字列「バチカン市国」で「バチカン」を含む文書もヒット
・文字の挿入
検索文字列「郵政民営化法案」で「郵政民営化関連法案」を含む文書もヒット
検索文字列「地震被害」で「地震の被害」を含む文書もヒット
・文字の欠落
検索文字列「中小企業雇用対策」で「中小企業対策」を含む文書もヒット
検索文字列「光ファイバー通信サービス」で「光ファイバーサービス」を含む文書もヒット
・文字の置換
検索文字列「アラビア語」で「アラビヤ語」を含む文書もヒット
検索文字列「ヴァイオリン」で「バイオリン」を含む文書もヒット
・複合パターン
検索文字列「首都の中心部」で「首都、東京の中心」を含む文書もヒット
指定した文字列の半分以上の長さの文字列が、指定した文字列の倍の長さの文字列に収まっていること(50%以上の合致)を曖昧さの判定基準としています。
デフォルトの検索対象プロパティ指定
前述のプロパティ指定の機能を使えば、特定のプロパティに特定の文字列が含まれる文書を検索できます。しかし、AND, OR, NOTなどを多用した複合的な検索式の場合、プロパティ指定機能を使って検索式を組み立てると、通常かなり複雑な検索式になってしまいます。
たとえば、titleとbodyのプロパティのいずれかに、「選挙演説」と「東京都」が含まれている文書を検索する場合、プロパティ指定機能を使って記述すると、次のような検索式になります。
([title “選挙演説”] AND [title “東京駅”]) OR ([body “選挙演説”] AND [body “東京都”]) OR ([title “選挙演説”] AND [body “東京都”]) OR ([body “選挙演説”] AND [title “東京都”])
これを、デフォルトの検索対象プロパティ指定機能を使って表現すると、次のような検索式になります。
PROPS title, body “選挙演説” AND “東京駅”
デフォルトの検索対象プロパティ指定機能を使うと、検索式の作成負担が減るばかりでなく、検索時間も高速に処理できるメリットがあります。
検索結果のソート
FINDSPOTでは検索結果の表示順を自由に指定できます。並び順については特定のプロパティについて降順、昇順の指定ができるほか、複数のソートキー(プロパティ)を指定して結果の並び順を指定することができます。
FINDSPOTでは大量の検索結果がヒットした場合に、即座に検索クライアントに対してレスポンスを返すため、特定の件数以上ヒットした場合には、検索結果のソートを行わないシステム設定が用意されています。システム構成により検索結果のソートの処理スピードは異なりますが、このソート上限を5千件から1万件程度に設定して運用されることをお勧めします。
検索結果
検索結果については次のような機能が提供されます。
・表示件数
一度に表示する検索結果の件数は、検索フォームの「表示件数」のフィールドで指定できます。
検索結果の表示画面では次ページ、前ページ、トップページのリンクをクリックすることで、ぞれぞれ次ページの結果、前ページの結果、最初のページの結果の検索結果表示画面に移動できます。
・検索結果の表示順
検索結果の表示順は検索フォームの「表示順」により指定できます。
指定可能な順序は、ヒット順、サイズ順、日付時刻順、ファイル名順、ヒット逆順、サイズ逆順、日付時刻逆順、ファイル名逆順のいずれかです。なお、CGIをカスタマイズすることで、特定の文書プロパティの順番で検索結果を表示することも可能ですので、CGIがカスタマイズされている場合には他の指定順の指定も可能になります。
・強調表示
検索結果には、検索式で入力した文字列が文書のどの部分で検索されたのかが強調表示されます。曖昧検索で一致した内容については強調表示されません。
文字の一対一置換機能
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は全文検索対象となる本文以外に、検索対象に対するさまざまな書誌情報を同時に扱えます。書誌情報としてはデフォルトで文書の作成日時、所有者、URIなどがありますが、その他にも利用したい書誌情報を自由に追加設定できます。設定を行なうには、インデックスの定義ファイルの中に書誌情報の詳細な型情報を指定します。
書誌情報は、全文検索対象として指定することもできますし、単に結果を取り出すための目的、検索結果の並び順を指定する目的、単純な完全一致検索などに使用できます。
書誌情報は、インデックスをかける際にFINDSPOT独自のXML形式に埋め込んで検索エンジンに渡されます。
前のページへ