LoginSignup
19
31

More than 5 years have passed since last update.

Webアプリに全文検索を導入する

Posted at

はじめに

Rails4.2 + MySQL5.6 ので動くアプリに対し、全文検索(日本語)がしたく、全文検索とは何かわかっていない状態から調べたときのまとめです。
MySQLを使う方法と、別の全文検索サーバーを用いる方法について調べました。

全文検索とは

複数文書にまたがって、文書に含まれる全文を対象とした検索
https://ja.wikipedia.org/wiki/全文検索

主なやり方

文書にインデックスをつけて、インデックスを引くことで高速に検索
インデックスの辞書を作るために、文章からインデックス(索引)を抽出する必要がある

英語の索引文字抽出

  • わかち書き(スペース区切り)であるため、スペースで区切る

日本語の索引文字抽出

MySQLを使う

MySQLに日本語全文検索対応のストレージエンジンを使う

MySQLの Fulltext indexを使う

全文検索サーバーを使う

下記のような選択肢がある

  • Elasticsearch
    • Elasticsearchを自分でたてる
    • Elasticsearch service (AWS)
    • Elastic cloud (Elasticsearchを作っている会社のサービス)
  • Amazon Cloudsearch
  • Solr
  • Groonga
  • Sphinx

全文検索エンジンの比較
http://mojavy.com/blog/2014/02/10/search-engine-comparison/

Amazon cloud searchから Elasticsearchに乗り換えた理由
http://blog.otakumode.com/2016/07/15/replace-cloudsearch-to-elasticsearch/

Elasticsearchの導入

既存のRailsアプリにElasticsearchを導入してみる
http://qiita.com/moriyaman/items/373107a3870c33229bac

Wantedlyの例
http://engineer.wantedly.com/2014/02/25/elasticsearch-at-wantedly-1.html

FRILの例
http://mosowave.hatenablog.com/entry/2015/12/07/000000

MySQLとElasticserachの同期

結論

まずはMySQLのFulltext indexで様子をみて、耐えられなければ、またより柔軟な検索を行いたければ別の全文検索サーバーをたてる。全文検索サーバーではElasticsearchがはやりのよう。

19
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
31