「ワード検索」の難しさと、Algolia Search という選択肢

 



2020/10/02

ポータルサイトには検索機能が必須ですが、なかでも「ワード検索」は非常に重要な機能です。

ワード検索機能について

ワード検索(全文検索)は大まかに2種類あります。
スコア計算」ができるか、できないか、です。

スコア計算というのは、検索されたキーワードに関して、適合度(スコア)が高いものから順に結果を返す機能です。

ふだん、検索エンジンに慣れ親しんだ現代の私たちには当たり前すぎる機能ですが、実際に作るとなると非常に高度な技術です。

例えば「ラーメン」という検索語が入力された場合、どのような結果を返すべきでしょうか。

ある人はラーメン店を探しているでしょう。
しかし、ある人はラーメンの作り方やレシピを探しているかもしれません。
ラーメンの種類を探しているかもしれませんし、語源を知りたいかもしれません。

要するに、コンピューターにわかるのは文字情報だけであって、検索した人の「意図」まではわからないのです。

そんな時にスコア計算が必要になってきます。

もしスコア計算がない場合、「ラーメン」という文字が含まれる全データを番号順か日付順かで羅列するだけで、たまたま「ラーメン」が含まれただけの不要なデータなども一緒くたに混ざってヒットします。
ユーザーにとっては多くのデータから目視で探す必要があり、面倒なので離脱してしまうでしょう。

スコア計算されていれば「ラーメンに関して最も詳しく書かれている」データを上位にして結果を返すことができます。
そのためスコア計算機能は、なるべくユーザーの負担を軽減し、望みの情報に最短で到達させるための機能なのです。

スコア計算機能を作るとしたら

どのような方針(アルゴリズム)で「スコア」を計算するかが重要です。

一般的な計算方法としては以下のようなものがあります。

  • 検索された語句が多く含まれれば高得点
  • データが作成された日付が新しければ高得点
  • ユーザーの評価機能があれば、それを点数とする
  • 管理者が手動で高得点にする(広告など)
  • AIに学習させる

ほかにも、例えばGoogleなどは「他からリンクされていれば得点」といった方針もあります。

言語処理

「日付の新しさ」「ユーザーの評価」「手動」は難しくない機能でしょう。
「AI」に関してはここで説明できるほど単純なものではなため、言及しません。

よって、まず問題となるのは1つ目に挙げた「検索された語句が多く含まれる」という機能です。

これを実現するには、まずは元のデータを「語句」単位に分解する必要があります。
さらに検索されたワードも同様に分解し、データの語句とマッチさせます。

これが英語なら、単語が空白で分かれているため比較的簡単に分解できます。
しかし日本語は非常に難しいです。
区切りが曖昧なうえ、ひらがな、カタカナ、漢字、ときにはアルファベットや記号(◎、♪、♡など)も混ざります。

例えば「だいぶつかった」をどう解釈するでしょうか。
「だいぶ使った」「だいぶ浸かった」「大仏買った」「台ぶつかった」・・・?

「塩ラーメン」を「塩」と「ラーメン」に分解しますか?
「塩ラーメン」のままの1単語としますか?

これらは前後の文脈が必要なので、その部分だけで見ると判断は不可能です。

しかし、コンピューターに前後の文脈などわかりませんので、機械的に分解することになります。

こういった分解作業は「形態素解析」と呼ばれ、様々な手法が考えられています。

日本語の場合、内部に辞書を用意しておき、それをもとに分解するのが一般的です。
しかし日本語は言葉や音が組み合わせやすいためか、毎日のように新語や造語が生まれ、辞書の更新も追いつかなくなり、どこかで必ず妥協が必要になります。

「Algolia Search」の検討

Algolia(アルゴリア)は、検索に関する機能を提供するサービスです。

検索だけでなく分析ツールなども提供しており、本記事では検索機能のみを指すため「Algolia Search」と書いています。

導入例としては、例えば アル(ali.jp)でマンガの検索に使用されていたり、キャンセル(cansell.com)ではホテルの検索に利用されていますので、いちどワード検索機能を試してみてください。
高速に、その場で結果がわかるため、探しやすく感じると思います。

導入の手軽さも Algolia の魅力です。

JavaScriptライブラリが用意されており、WordPressへの導入のしかたや、LaravelのScout用ライブラリも、公式で提供していますので、ポータルサイトへも楽に組み込めるでしょう。

サイトでのデータ作成時(記事の投稿など)に、APIを通じて Algolia へもデータを保存する仕組みなので、個人情報を含むデータなどは扱わない方が良いでしょう。

無料の範囲は「1,000データまで、1ヶ月で10,000回の検索まで」です。

ポータルサイトでなくても、ブログやコーポレートサイトでのサイト内検索にも十分に役立ち、多くの場合は上記の無料範囲内で収まるのではないでしょうか。


「ワード検索」は見た目のシンプルさと利便性から簡単に作れるように思われることが多く、開発者泣かせな場合がありますので(笑)、おおまかな仕組みを知ってもらえるといいですね。