Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

いろいろ考えると日本語の全文検索もMySQLがいいね!

6,077 views

Published on

MySQLは広く使われているRDBMSです。速いし、レプリケーションのノウハウもあるし、Web上にたくさんの情報もあるからいざというときも安心、というのがその理由でしょう。

そんなMySQLの弱点の1つがデフォルトでは日本語で全文検索できないことです。でも、日本語で全文検索したいし。。。どうしよう。

そんなあなたに最近の日本語の全文検索事情を紹介します。Solr?Elasticsearch?Groonga?PostgreSQLはどうやっているの?Mroonga?Sphinx?

いろいろ考えると日本語で全文検索するときもMySQLを使うのがいいね!と思えてくるから不思議です。最近の日本語の全文検索事情を聞いて一緒に考えてみませんか?

Published in: Technology
  • -- DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT -- ......................................................................................................................... ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... (Unlimited)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THI5 BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

いろいろ考えると日本語の全文検索もMySQLがいいね!

  1. 1. いろいろ考えると 日本語の全文検索も MySQLがいいね! 須藤功平日本MySQLユーザ会 OSC2014 Tokyo/Fall 2014/10/18 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  2. 2. 目標 日本語対応の 全文検索機能を (そこそこ仕組みをわかった上で) 実装できる いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  3. 3. 前提 MySQLを使っている まあまあかそこそこのデータ量 ビッグデータ云々じゃない (そういう人はHadoopの枠に行っているよね?) 日本語テキストを検索したい でも、全文検索をよく知らない いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  4. 4. 全文検索について 全文検索とは… いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  5. 5. とりあえず動かそう データベース作成 テーブル作成 データ投入 全文検索! いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  6. 6. データベース作成 CREATE DATABASE full_text_search; USE full_text_search; いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  7. 7. テーブル作成 CREATE TABLE memos ( content TEXT ) DEFAULT CHARSET=utf8mb4; いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  8. 8. データ投入 INSERT INTO memos VALUES ("Hello world!"), ("Good-bye world!"), ("Hello MySQL!"); いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  9. 9. 全文検索! SELECT * FROM memos WHERE content LIKE "%Hello%"; -- +--------------+ -- | content | -- +--------------+ -- | Hello world! | -- | Hello MySQL! | -- +--------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  10. 10. 全文検索! - もっと AND OR 大文字小文字無視 日本語 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  11. 11. 全文検索! - AND SELECT * FROM memos WHERE content LIKE "%Hello%" AND content LIKE "%world%"; -- +--------------+ -- | content | -- +--------------+ -- | Hello world! | -- +--------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  12. 12. 全文検索! - OR SELECT * FROM memos WHERE content LIKE "%Good%" OR content LIKE "%MySQL%"; -- +-----------------+ -- | content | -- +-----------------+ -- | Good-bye world! | -- | Hello MySQL! | -- +-----------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  13. 13. 大文字小文字無視 SELECT * FROM memos WHERE content LIKE "%mysql%"; -- +--------------+ -- | content | -- +--------------+ -- | Hello MySQL! | -- +--------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  14. 14. 大文字小文字無視 - 理由 SHOW TABLE STATUS LIKE "memos"G -- ... -- Collation: utf8mb4_general_ci -- ... いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  15. 15. Collation 照合順序(って言われてわかる?) 文字の比較ルール 「a」と「b」はどっちが大きい? 「a」と「A」は等しい? utf8mb4_general_ci 同じようなアルファベットは同一視 (直感的だけど雑な説明) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  16. 16. 日本語 - データ投入 INSERT INTO memos VALUES ("こんにちは"), ("こんばんは"); いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  17. 17. 日本語 - 全文検索! SELECT * FROM memos WHERE content LIKE "%こんにち%"; -- +-----------------+ -- | content | -- +-----------------+ -- | こんにちは | -- +-----------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  18. 18. 全文検索の実装方法まとめ DEFAULT CHARSET=utf8mb4 INSERT LIKE "%キーワード%" ANDもORも日本語も可 大文字小文字無視も可 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  19. 19. 日本語をもっと! いわゆる全角アルファベット対応 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  20. 20. 全角アルファベット SELECT * FROM memos WHERE content LIKE "%Hello%"; -- +-----------------+ -- | content | -- +-----------------+ -- +-----------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  21. 21. Collation変更 ALTER TABLE memos MODIFY COLUMN content TEXT COLLATE utf8mb4_unicode_ci; いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  22. 22. utf8mb4_unicode_ci Unicode的に同じ文字を同一視 (直感的だけど雑な説明) 例:全角文字半角文字を同一視 参考:MySQL 5.5 の unicode collation で同一視さ れる文字 http://tmtms.hatenablog.com/entry/20110416/ mysql_unicode_collation utf8mb4_general_ciより遅い いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  23. 23. 全角アルファベット SELECT * FROM memos WHERE content LIKE "%Hello%"; -- +--------------+ -- | content | -- +--------------+ -- | Hello world! | -- | Hello MySQL! | -- +--------------+ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  24. 24. 採用を検討 機能は十分? やりたいことと相談 性能は十分? データ量・リソースと相談 実データが望ましい!!! Webの情報は参考程度で実際に計測 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  25. 25. 性能検討例 データ:livedoorグルメ https://github.com/livedoor/datasets 件数:約20万口コミ CPU:Core i7 2.80GHz いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  26. 26. 文字数の傾向 SELECT AVG(CHAR_LENGTH(comment)) AS average, MIN(CHAR_LENGTH(comment)) as min, MAX(CHAR_LENGTH(comment)) as max FROM ratings_all; -- average: 380.2013 -- min: 2 -- max: 6243 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  27. 27. %ラーメン% SELECT COUNT(*) AS count FROM ratings_all WHERE comment LIKE "%ラーメン%"; -- count: 31428 -- 0.898sec いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  28. 28. %ラーメン%の傾向 実行時間は総件数に比例 総件数時間(秒) 1000 0.01 5000 0.03 10000 0.05 100000 0.50 205832 0.89 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  29. 29. AND SELECT COUNT(*) AS count FROM ratings_all WHERE comment LIKE "%ラーメン%" AND comment LIKE "%焼き肉%"; -- count: 69 -- 1.01sec いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  30. 30. ANDの傾向 条件数1の場合とあまり変わらない 総件数時間(秒) 条件数1 1000 0.01 0.01 5000 0.03 0.03 10000 0.06 0.05 100000 0.57 0.50 205832 1.01 0.89 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  31. 31. OR SELECT COUNT(*) AS count FROM ratings_all WHERE comment LIKE "%ラーメン%" OR comment LIKE "%焼き肉%"; -- count: 31994 -- 1.37sec いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  32. 32. ORの傾向 2倍いかないくらいには増える 総件数時間(秒) 条件数1 1000 0.02 0.01 5000 0.05 0.03 10000 0.09 0.05 100000 0.77 0.50 205832 1.37 0.89 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  33. 33. 考察 自分たちのデータ量は? 各レコードのテキストサイズ 総件数 どのくらい性能が必要? 1リクエストのレスポンスタイム 単位時間あたりの処理数 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  34. 34. 考察例 自分たちのデータ量は? 各テキストサイズ:400文字くらい (データセットと同じくらい) 総件数:2,3万くらい どのくらい性能が必要? s/req: 0.5秒以内 queries/s: 10 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  35. 35. 実行時間 0.2秒以内には終わりそう 総件数時間(秒) 10000 0.05 100000 0.50 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  36. 36. スループット 1クエリー0.2秒 1秒で5クエリー CPUコア2つで10qpsいけそう (実際は他の条件も加わる→もっと時間がかかるはず) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  37. 37. 考察結果は? LIKEで十分? 機能面と性能面を検討 MySQLでLIKEで日本語全文検索! (全文検索エンジンが必要ないなら使わなくてよい) LIKEだと不十分? 機能面?性能面? 別の選択肢を検討 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  38. 38. 別の選択肢 MySQLベースの全文検索機能 全文検索サーバーと連携 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  39. 39. 全文検索機能のスキーマ CREATE TABLE ratings_all_index ( comment TEXT, FULLTEXT INDEX (comment) -- ↑を追加するだけ ) DEFAULT CHARSET=utf8mb4; いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  40. 40. 全文検索機能の検索方法 SELECT COUNT(*) AS count FROM ratings_all_index WHERE MATCH (comment) AGAINST ("+ラーメン +焼き肉" IN BOOLEAN MODE); いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  41. 41. 全文検索機能のよいところ 簡単! 高速な検索! インデックスを使った検索 (LIKEは逐次検索) MySQLとよく統合されている データ登録→インデックス自動更新 トランザクションにも対応 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  42. 42. 全文検索機能の悪いところ 日本語未対応 更新が遅い いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  43. 43. 日本語未対応 対策 アプリケーション側で前処理 参考:MySQL Casual Talks Vol.4 「MySQL-5.6で始める全文検索 〜InnoDB FTS編〜」 http://www.slideshare.net/y-ken/my-sql-56innodb-fts トレードオフ インフラの管理コストと アプリのメンテコスト (簡単に使えるというメリットは減る) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  44. 44. 更新が遅い ベンチマーク結果 前述のスライドを参照 対策 速いディスクを使う あまり更新しない 検討ポイント どのくらい更新があるか いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  45. 45. 全文検索機能のまとめ データは安全 トランザクションを使える レプリケーションもできる 検索は速い・更新は遅い 日本語対応にはひと手間必要 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  46. 46. 全文検索機能を使う? そこそこのデータ量がある アプリ側のひと手間を 許せるならアリ 更新が少ないならアリ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  47. 47. 突然の質問 MySQLの特徴と 言えば? (期待する答えがでるまで聞きます) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  48. 48. プラグイン機能 一部の機能を追加できる ストレージエンジン・UDF・… 全文検索機能も追加できる いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  49. 49. 全文検索プラグイン Mroonga いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  50. 50. Mroongaのスキーマ CREATE TABLE ratings_all_index ( comment TEXT, FULLTEXT INDEX (comment) -- ↑と↓を追加するだけ ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4; いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  51. 51. Mroongaの検索方法 -- MySQL標準の方法と同じ SELECT COUNT(*) AS count FROM ratings_all_index WHERE MATCH (comment) AGAINST ("+ラーメン +焼き肉" IN BOOLEAN MODE); いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  52. 52. Mroongaのよいところ 簡単! 高速な検索と更新! 日本語対応!(開発者が日本人) MySQLとそれなりに統合 データ登録→インデックス自動更新 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  53. 53. Mroongaの悪いところ トランザクション非対応 NULL非対応 別途インストールが必要 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  54. 54. トランザクション非対応 対策 レプリケーションをして、 マスターをInnoDB、 スレーブをMroongaにする 参考 多くの全文検索システムは トランザクション非対応 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  55. 55. NULL非対応 対策 NULLを使わない いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  56. 56. 別途インストールが必要 対策:パッケージを使う パッケージ CentOS 6, 7 Fedora(公式) Debian/Ubuntu 安定版リリース Windows OS X(Homebrew/MacPorts) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  57. 57. Mroongaのまとめ 日本語対応 検索も更新も速い インストール作業が必要 使うときは簡単 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  58. 58. Mroongaを使う? そこそこのデータ量がある 更新が多い トランザクションとNULLが なくてもよいならアリ 開発者を信頼できるならアリ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  59. 59. ここまでの話のポイント 全文検索方法の 詳細を 知らなくても 使える いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  60. 60. 別の選択肢 MySQLベースの全文検索機能 全文検索サーバーと連携 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  61. 61. 全文検索サーバー Solr Elasticsearch Groonga Sphinx(http://sphinxsearch.com/) Amazon CloudSearch いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  62. 62. 違い 機能面 全文検索初心者が使う分には どれも不足なし 性能面 まあまあかそこそこのデータ量 (1台のサーバーでさばける量) ならどれも十分な性能 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  63. 63. 機能面:補足1 全文検索対応の進め方1 いきなりカンペキを目指さない まず動かして実際に試す 改良したいという箇所に気づく 1つずつ改良しながら 仕組みを学んでいく いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  64. 64. 機能面:補足2 全文検索対応の進め方2 詳しい人に相談 MySQLユーザ会のブースへ! いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  65. 65. 連携 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  66. 66. アプリの動作:更新 ➀ ➂ ➁ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  67. 67. アプリの動作:更新 更新時 トランザクション開始 MySQLにデータ投入 全文検索サーバーにもデータ投入 トランザクション終了 ロールバックはアプリの仕事 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  68. 68. アプリの動作:検索 ➀ ➁ ➂ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  69. 69. アプリの動作:検索 検索時 全文検索サーバーで検索 見つかったレコードIDを条件に MySQLで検索 スコアとか結果をマージして表示 JOINはアプリの仕事 全文検索と他の検索を混ぜるときは どうするか考えてみよう いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  70. 70. アプリの開発 実装 ライブラリーを使う 更新・検索をサポートしてくれる テスト 各自全文検索サーバーを用意 開発環境の用意が面倒になる (VagrantやDockerを使うといいかも) いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  71. 71. インフラ MySQLとは別に 全文検索サーバーを管理 パラメーターの設定 落ちた時どうする? システムが必要なリソース増加 例:専用マシンを追加 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  72. 72. 連携したときのよいところ SQLが苦手なクエリーを 効率よく実現できる ファセット・タグ検索 チューニングできる トークナイザーを変える フレーズ検索→近傍検索 トークンの正規化方法を変える等… いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  73. 73. トークナイザー 空白区切り(英語やタグの検索に便利) N-gram 適合率↓検索漏れ↓ アルファベットの文章で遅い 形態素解析 適合率↑検索漏れ↑ 新語に弱い いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  74. 74. N-gram 文字種が多い言語に向いている 日本語 文字種が少ないと効率が悪い 英語 文字種により挙動を変えて改善 日本語:N-gram、英語:単語単位 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  75. 75. 形態素解析 区切り方が複数パターンある 全パターンインデックスに登録 ↑は検索漏れは↓が適合率も↓かも 検索時に使い分ける ヒットしなかったら N-gramにフォールバック いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  76. 76. フレーズ検索→近傍検索 「日野でラーメン」で検索 ○「日野でラーメン」 ×「日野でみそラーメン」 「日野 ... ラーメン」で検索 ○「日野でみそラーメン」 ○「日野で塩ラーメン」 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  77. 77. 正規化 英単語のステミング 濁点を無視する?しない? すし=ずし ハハ=パパ=ババ 同義語はいつ展開? いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  78. 78. 連携したときのよいところ SQLが苦手なクエリーを 効率よく実現できる ファセット・タグ検索 チューニングできる トークナイザーを変える フレーズ検索→近傍検索 トークンの正規化方法を変える等… いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  79. 79. 連携したときの悪いところ メンテナンスコストが増える 開発面でもインフラ面でも 必要なリソースが増える ランニングコストが増える ある程度全文検索の知識が必要 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  80. 80. サーバー連携のまとめ 日本語対応 検索も更新も速い チューニングできる 導入・運用は手間が増える 使うときも手間が増える いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  81. 81. 全文検索サーバーを使う? そこそこのデータ量がある チューニングしたい 導入・運用・開発の手間増加が 割に合うならアリ いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  82. 82. 参考:PostgreSQL 日本語未対応 プラグインで対応 完全転置インデックスではない インデックスだけ使うと誤検出あり ↑の後にLIKEで誤検出を除去 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  83. 83. まとめ LIKEで十分ならLIKEでいい LIKEで不足ならMroonga それでも不足なら マスターデータはMySQL 検索対象は全文検索サーバー いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  84. 84. つまり! いろいろ考えると 日本語の全文検索も MySQLがいいね! MySQLが役に立つね いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  85. 85. お知らせ1 MySQLユーザ会ブースあり 隣はOracleのMySQLの人たち 17:15-別のMySQL枠あり OracleのMySQLの人の話 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  86. 86. お知らせ2 MariaDBにMroongaバンドル! 10.0.15から組み込み! 別途インストールしなくてよい! いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  87. 87. お知らせ3 検索エンジンについて知りたい 「検索エンジン自作入門」 いい肉の日に渋谷で Groongaイベント! 「いい肉 Groonga」で検索 自作本のサイン会をやるよ! いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3
  88. 88. お知らせ4 Groongaをもっと知りたい Groongaドキュメント読書会 詳細は↑で検索 Mroongaが使っている 全文検索エンジンの理解を深める会 1,2ヶ月に1回開催 いろいろ考えると日本語の全文検索も MySQLがいいね! Powered by Rabbit 2.1.3

×