全文検索とは?非エンジニアでもわかる検索の仕組み
今回は、ECサイトやコンテンツメディアを運営する方向けに、「全文検索」の仕組みについて、非エンジニアの方でも理解できるように分かりやすくお伝えしていきたいと思います。
全文検索とは、入力したキーワードをもとにマッチした情報を探し出すことを言います。
言葉や概念は何となく知っているけど、その詳細に関しては疑問だらけという人も多いかと思います。
Webサイトを運営する人にとって、サイト内検索で使われる「全文検索」は、サイトの良し悪しを決める重要な機能であり、実はきちんと知っておかなければならない仕組みなのです。
全文検索とは何なのか?基礎知識を押さえる
全文検索について説明をおこなう前に、そもそも検索とは何なのか?
検索とは、あるデータ(情報)の集まりの中から目的に合った情報を探すことです。
図書館や書店でジャンルをもとに本棚から書籍を探し出したり、辞書を引くといった具合に昔から検索は日常の中でよくおこなわれてきました。
では、皆さんは最近どのような検索を頻繁におこなっているでしょうか?
最もよくおこなっているケースとしては、パソコンやスマホから検索エンジンを使用して、目的に合ったWebサイトを検索したり、ECサイトで欲しい商品を検索するといったインターネットを活用した検索ではないでしょうか。
インターネットでの検索は、検索ワードを入力するだけで、欲しい情報が瞬時に結果として表示されるのでとても便利ですよね。
スマホの普及により通勤、通学、自宅でのちょっとした隙間の時間など、気になることがあればすぐにインターネットで検索して調べるという方は多いかと思います。
つまり、検索という行為は「私達の日常の中に深く根付いているもの」と言っても過言ではありません。
それでは、本題に入り「全文検索」とは一体何なのでしょうか?
一言で表すと、全文検索は数ある「検索手法の中の一種」と捉えられます。
「全文検索」の「全文」とは、「全ての文字」という意味で、複数の文書ファイルの中に含まれている全ての文字を対象として、その中から何かを探すということになります。
どういう全文検索技術があるのか?
では世の中には一体どういう全文検索技術があるのでしょうか。
ここでは大きく以下の2つに大別してご説明していきたいと思います。
・「逐次検索」(例:grepなど)
・「索引」を用いての全文検索
2つの違いについてですが、例えば冷蔵庫から特定の原材料を含む食品を探すイメージをしてみてください。
まず最初に挙げた「逐次検索(grepなど)」の方法では、冷蔵庫を開けて食品をひとつづつ取り出してチェックしながら探します。
真っ先に思いつく探し方ですよね。
ところが「索引」を用いる方法では、あらかじめ冷蔵庫の中にある食品とその原材料を記したリストを紙にまとめて扉に貼っておきます。
そうすることで、わざわざひとつずつ食品を取り出してチェックする必要が無く、冷蔵庫の扉を見るだけでで探し出すことができます。
コンピュータのシステムと冷蔵庫を厳密には、同等に扱うことはできませんが、あくまで想像しやすいように喩えると上記のようなイメージです。
それでは、それぞれについて更に細かくご説明していきましょう。
(1) 逐次検索(grepなど)での全文検索について
逐次検索は、「全文照合方式」・「順次走査検索」などとも言い表すことができます。
先ほど冷蔵庫を例にご紹介したように、複数の文書ファイルに書かれている文字列を順番にひとつずつ走査(チェック)していくことにより、検索の対象となる文字と一致する文書を探し出します。
* 逐次検索のメリット
逐次検索のメリットとしては、その仕組みがとてもシンプルで、検索の精度が高いということが挙げられます。
検索の精度が高いというのは、検索結果の誤りや偏りが少ないということになります。
*逐次検索のデメリット
逐次検索のデメリットとしては、ひとつずつチェックする分、検索の精度は高いものの、検索する対象が増えると当然ながらそれだけ時間が多くかかってしまいます。
つまり対象のデータ量が多くなるのに比例して、検索速度が低下がします。
もし例えば、ECサイトなどで欲しい商品を検索する際に、時間がかかってなかなか商品が表示されなかったらどうでしょうか。
ユーザー体験が阻害され、サイトから離脱されてしまうでしょう。そうなると大きな機会損失に繋がります。
そこで、検索速度を低下させないようにする方法として挙げられるのが、索引(インデックス)を用いる方法です。
(2) 索引(インデックス)を用いて全文検索する方法
そもそも索引とは一体何なのでしょうか。
索引とは、ある文書の中の文字列や事項(国・地域・人名…etc)などを、簡単に探し出せるように抽出して並べた表のことを言います。コンピュータ用語としては「インデックス」と呼ばれます。
検索の対象となる複数の文書ファイルをあらかじめ中身をチェックしておき、その内容を記した索引データを準備することで余計なパフォーマンスをかけずに効率的に検索することができます。
ただ索引データを作成する処理は、検索の前に事前におこなっておく必要があり、その際には負荷の高い処理になるということに注意しておく必要があります。
ではどういうアルゴリズムで索引データを事前に準備するのでしょうか。
その代表的なものが以下の2つです。
・形態素解析で索引ワードを抽出する
・N-gramで索引ワードを抽出
簡単にこの2つの違いをご説明しますと、検索対象の文章を単語単位で分けるか、文字単位で分けるかになります。
(2-1) 形態素解析で索引ワードを抽出する
形態素解析を用いると、自然言語の文書から文脈を解析して単語の分解をおこない、それをもとに索引を作成することができます。
「形態素」の意味にまで言及すると言語学の領域になるので、この記事では深く踏み込みませんが、簡単に解析から検索の流れをご説明すると
①検索対象の自然言語の文書に対して分かち書きをおこなう
②分かち書きした単語の単位を「見出し語」として索引を作成する
③索引を元に検索をおこなう
となります。分かち書きして単語するというのが、もしかするとピンと来ないかもしれません。
具体的に、以下のような文書があったとします。
文書1「グレー/の/コート/が/好き」
文書2「グレー/の/ワンピース/が/好き」
これらの文書から名詞と動詞に絞って索引を作成するとなると以下のようになります。
「グレー」文書1,文書2
「コート」文書1
「ワンピース」文書2
「好き」文書1,文書2
「コート」で検索すれば文書①しかマッチしませんし、「グレー」で検索すれば両方ともマッチします。
* 形態素解析のメリット
検索の速度が比較的に速いのが特徴で、また索引データの量も少なくなり、余計にデータ保存の領域を確保する必要がありません。
* 形態素解析のデメリット
形態素解析のデメリットは、そもそも日本語辞書に登録されていないようなひらがなやカタカナ単語の抽出が難しいなど、AIの活用といった技術的な障壁も高く、上手く抽出できなければ検索精度が低下するデメリットがあります。
上記の例であれば、「ワンピース」と解析できていたとしても、関連する形で「ワンピ」といったファッション用語的な略語がしっかり辞書登録できていなければ、検索の漏れに繋がります。
(2-2) N-gramで索引ワードを抽出する
N-gramは形態素解析と異なり、検索の対象を単語単位ではなく、単純に文字の並びを「見出し語」として索引を作成していきます。
N-gramの「N」には、その分解する文字数の値が入り、Nが1文字なら「ユニグラム」、2文字なら「バイグラム」、3文字なら「トライグラム」と呼びます。
例えば「私は映画が好きです」を2文字で分解すると、
となり、索引を作成して検索する流れとしては以下のようになります。
①検索対象の文書をN文字単位で分解していく
②分解した文字の単位を「見出し語」として索引を作成する
③索引を元に検索をおこなう
具体的に、先ほども登場した「グレーのワンピース」という文書を3文字で分解してみましょう。
「グレー」「レーの」「ーのワ」「のワン」「ワンピ」「ンピー」「ピース」「ース」
というように先頭から1文字ずらしながら、3文字単位で分解することができます。
こうすることで「グレー」「ワンピース」と検索すればマッチしますし、「ワンピ」と検索してもマッチさせることができます。
* N-gramのメリット
形態素解析と比べて、N-gramは文字の並びで分解するため、日本語辞書のようなものが必要ありません。
また、より細かく文字を分解できるため、検索の精度は形態素解析より高くなります。
* N-gramのデメリット
N-gramのデメリットとしては、検索ノイズと呼ばれる期待するものと異なる検索結果が生じる可能性があります。
検索ノイズの例としては、「東京都」を意味する文書があったとして、「京都」と検索した場合にもマッチする事象が発生します。
更に、文字の並びで分解するとそれだけ索引データの量が増える為、検索速度も遅くなってしまいます。
(2-3) その他の索引(インデックス)方法
その他にも索引を用いて全文検索する方法として、接尾辞配列・シグネチャ法などが存在します。
今後、技術の進化により更なる検索手法のアイデアも生まれてくることでしょう。
最後に
いかがでしたでしょうか。
ひとえに全文検索と言ってもそこには、様々な複雑に思えるアルゴリズムや仕組みが取り入れられていること、そしてそれぞれに一長一短があるということを少しでもご理解できたのではないでしょうか。
今回のテーマに関連して最後に言わせてください。
サイト運営者にとって何より大事なことは、ユーザーに優れた検索体験を提供することです。
sui-seiのサイト内検索エンジン「リッチサーチ」では、今回ご説明した全文検索をはじめ、ユーザーの離脱を防ぎ、快適な検索環境を提供する機能を各種搭載しております。
また「リッチサーチ」には、逐次検索と索引検索の両方の技術が使われており、アパレルをはじめとしたECサイト内の検索の向上につなげるために用語を独自に収集している点が他とは異なる最大の特徴です。
独自に収集した辞書により精度の高い形態素解析が可能となっています。
もし「リッチサーチ」に少しでもご興味がございましたら、気軽にお問い合わせください。
今回ご紹介した全文検索に関するご質問もお待ちしております!