Magentoに限らず、一般的なWebアプリケーションの検索機能というものは、データベースに対する検索が標準機能として提供されています。
この検索機能は、実装方法にもよりますが、概して低速で、しかも想定通りの結果が得られない事が多々あります。

このエントリでは、Magento Community Editionに、全文検索エンジンのApache Solrを連携させるエクステンションの導入方法を紹介し、Magentoの検索機能を改善する方法をご紹介します。

思い通りの結果が得られないMagentoの検索機能

Magentoの検索機能は、標準ではMySQLに保存したデータに対するLike検索または全文検索です。
たいていのサイトではLike検索を使って、検索機能を提供していると思います。
ところが、これが思うとおりの結果が得られない事が多いのです。

Like検索が思う通りに動かない理由

Like検索は非常にシンプルで、かつわかりやすい作りをしています。
基本的には、

  • 入力された文字列を所定の文字で区切る
  • 各キーワードの先頭と最後に「%」をつけて、データベースに問い合わせる

というものです。
各キーワードをAND条件とするか、OR条件とするかは実装によりますが。
Magentoの場合は標準ではOR検索なので、キーワードのどれかに一致すれば良いことになります。
そのため、場合によっては「ヒットしすぎる」という現象が起きます。
反対に、ANDにすると「全くヒットしない」ということにもなりえます。 

まず最初の理由としては、OR条件なのかAND条件なのか、ということがあるわけです。

文字の種類と表記の揺れ問題

さらに日本語には特有の問題があります。
アルファベットだけの言語であれば、あまり問題にもならないかもしれませんが、日本語の場合は

  • 漢字
  • ひらがな
  • カタカナ
  • アルファベット
  • 数字・記号

という文字の種類があり、漢字の中には旧字体や異体字などが含まれます。
例えば、データベース上はカタカナで記録されているキーワードに対し、ひらがなで検索したらどうでしょう?
多分と言うか確実にヒットしません。これは文字として一致しないからです。

また、アルファベットのスペルを間違えてしまうことは往々にあります。この場合、データベースに対する検索ではスペル修正をすることになりますが、実際にやるとなるとそれなりに大変な作業であると思います。

Like検索を使っていると、そういうキーワードの表記ゆれや綴り間違いといった問題を解消することがなかなか難しく、問題を解決するためには、かなりシステムを作りこまないといけないという問題があります。

全文検索エンジン・Apache Solr

そんなMagentoの検索機能を改善する方法として、Magento Enterprise EditionではApache Solrとの連携機能が標準で搭載されています。
Solrの良い所は、

  • 高速な検索パフォーマンス
  • シノニムやスペルチェック機能による表記の揺れ調整
  • ユーザー定義辞書による検索精度の向上
  • 形態素解析エンジンによる日本語文章の分かち書きと検索
  • ファセット検索によるレイヤーナビの処理

というところがあります。
なかでもやはりユーザー定義辞書やシノニム、スペルチェック機能は検索精度の向上に大きく影響します。

Matento-solariumとは

Magento Solariumとは、いくつかあるMagento Community Edition用のApache Solr連携エクステンションのひとつです。
無料で利用でき、導入も簡単です。
検索機能だけを置き換えるエクステンションなので、Enterprise Editionに付属するものほど高機能ではありませんが、検索を良くしたいという要望には応えてくれるはずです。 

エクステンションのインストールと設定

Magento Solariumのインストールは、Magento Connectから簡単に行えます。
最新版を利用したい場合は、GitHubのリポジトリからダウンロードできます。
最新版では日本語ロケールがマージされたので、管理画面も日本語で利用できます。 

インストールがうまく出来ると、管理画面の設定項目に、Solariumのメニューが増えます。
「接続テスト」「セルフテスト」ボタンでSolrサーバーと接続できるかテストできるので、運用開始前にかならずチェックしてください。 

Solariumの設定

あとは平行してApache Solrのセットアップを行います。

Solrのセットアップと調整

Solrをセットアップする場合、OSベンダーなどが提供するパッケージを利用する方法と、公式サイトからダウンロードする方法の2通りがあります。
どちらでも構わないのですが、SolariumはSolr3以上をサポートしているので、あまり古いバージョンだとうまく動かない恐れがあります。 
できればより新しいバージョンのSolr4を使うほうが、よりよい性能・結果を得られるでしょう。

Solrが起動できたら、Solariumに付属する、

  • solrconfig.xml
  • schema.xml

をSolrに付属するものと差し替えます。schema.xmlにはMagento用の設定がすでに書き込まれているので、すぐ使うことができます。

無事に設定ファイルが更新でき、Solrが起動したら、Magentoから検索をしてみます。
画面右上にある検索フォームにテキストを入れると、ヒットした商品をサジェストしてくれます。

検索サジェスト

これでMagento Solariumの導入は完了です。

さらに検索結果を調整するには

さて、Magento Solariumは導入するだけである程度Magentoの検索機能を改善してくれます。
ですがさらに精度の高い検索結果を求めるのであれば、Solrのチューニングが必要になります。
具体的には以下のような調整が必要です。

  • ユーザー定義辞書の調整
  • シノニム定義の調整
  • スペルチェック定義の調整

概してECサイトで行われる検索というものは、一般名詞ではないことが大半です。
というのは製品名はそのサイトやメーカー独自の名称であることが多く、一般的な辞書データで形態素解析処理を行うと、変なところで区切られる恐れがあります。
そんな時は、ユーザー定義辞書を整備することで解消できます。検索結果が思わしくないな、と思ったら、辞書データを改良してみてください。
また、カタカナとふりがなの自動補正やよくあるスペルミスの修正データなども整備していくことが必要です。