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.
はじめての
検索エンジン&Solr
検索エンジンの概要~Solrの活用まで
第13回 Solr勉強会(2014/1/29)

N.Suzuki
自己紹介
 氏名:鈴木 教嗣(スズキ ノリツグ)
 所属:株式会社NTTデータCCS
 著書:改訂新版 Apache Solr入門(技術評論社)
[著]大谷 純, 阿部 慎一朗, 大須賀 稔, 北野 太郎, 平賀 一昭, 鈴木 教嗣
[監...
検索エンジンの話
検索エンジンとは?(その1)
 検索エンジンの用途
 どのようなところで使われているか?
Google

ショッピング

MSN
Webページを検索

プロジェクトの資料
社内の共通資料
社内のファイルを検索

Web系

宿検索

飲食店...
検索エンジンとは?(その2)
 大量の文書データから特定の文書を探すツール
 どのように探すか?

フリーワードで探す
カテゴリーで探す
日付や数値の範囲で探す
並べ替えて探す(安い順など)

検索するための多くの機能を持つ
検索方式の話
 主な検索方式

順次検索
 データの先頭から文字列が合致するか探す方式

索引検索
 索引を作成して、その索引から探す方式

索引:インデックスとも。Solrの場合は転置インデックスとも言う。

Chapter-1
検索方式の話(順次検索)
順次検索
 1冊の本で例えるなら…
 先頭ページから順に単語を探すイメージ
 その単語があるか無いかわからないが、最終ページまで検索

 使われているところ
 テキストエディタやブラウザのページ内検索
 L...
検索方式の話(索引検索)
索引検索

索引・Index

 1冊の本で例えるなら…
 本の末尾にある索引から単語から目的ページを探すイメージ
 仮に…索引にそのワードがなければ、「ヒットなし」となる。

 特徴
 事前に索引を作成する...
検索エンジンの基本
 転置インデックスについて
 文章を特定の単位で区切ってインデックスのキーとし、
それに紐づく文書番号を保持したもの。

の

首都

は

です

東京の天気は晴れです
東京

の

天気

は

晴れ

です

1
...
検索エンジンの基本
 転置インデックスから探す
 転置インデックスを使って「首都」を検索してみる。
単語

文書番号

日本

1

首都

1

東京

1,2

天気

2

晴れ

2

です

1,2

の

1,2

は

1,2...
検索エンジンの基本
 柔軟かつ高速なフリーワード検索
大量データに対する検索が高速なのは

転置インデックス
のおかげ!
Apache Solrの話
Apache Solrとは
 Solr = ソーラーと読む
 全文検索エンジンサーバアプリケーション
 JettyやTomcatなどで動作

 2007.1 Apache projectのトップレベルプロジェクトに
 現在はApach...
Solrの特徴
 Full Javaで書かれているオープンソース
 無償で利用可能であり、ソースも公開されている

 容易に検索サーバが構築可能
 数コマンドで検索サーバを利用できる

 小規模から大規模まで対応
 更に複数のスケー...
Solrの検索までの流れ
 Indexの作成から検索まで
データソース

DB

Webクロール

フロントアプリ

Solrサーバ

既存データ

検索
クエリ

Webサーバ

結果

Index
の
作成

Solr Index

各種...
Solrの機能紹介
 検索
 検索クエリ
 スコアによるソート
 スコアリングについて

 多言語に対応した柔軟な検索
 ファセット検索(Facet)/ 緯度経度検索(Spatial)

 ハイライト機能 / グルーピング機能

...
Solrの検索クエリ
 Solrの検索方法
 Solr用の検索式(クエリ)を使用します。
検索条件を フィールド名

q=
sort=
rows=

ソート条件

:

検索ワード

フィールド名

(スペース)

の形式で指定
asc /...
Solrの機能紹介(スコア)
 スコアによるソート
 スコア=検索条件の一致度の指数
 検索条件によりマッチしたドキュメントが高スコア

 Solrのスコアを算出する計算式
 デフォルトではLuceneのスコア計算式
 tf-idf...
Solrの機能紹介(スコア)
 単語ヒット数(coord)
 検索したワードが幾つヒットしたか
 例:OR検索した時などに影響
「ジャガイモ OR ベーコン OR タマネギ」で検索
ジャガイモ
 「材料:ジャガイモ、ニンジン、豚肉」・・...
Solrの機能紹介(スコア)
 出現数(tf)
 1フィールドにそのワードが何個あるか
 例:「Solr」で検索
Solr
 「Solrを使ってみよう」・・・1回
Solr Solr
Solr
 「SolrのSolrによるSolrのた...
Solrの機能紹介(スコア)
 希少度(idf)
 そのワードがどのくらい稀少か(Solrでは価値がある)
 例:「ジャガイモ OR タマネギ」で検索
ジャガイモ
 「材料:ジャガイモ、ニンジン、豚肉」 高スコア
タマネギ
 「材料:...
Solrの機能紹介(スコア)
 Solrのスコア
 単語のヒット数、出現頻度、希少度の他、
フィールドの長さ(割合)、ブーストなどの要素を加味し
てスコアリングを行っている
 通常の検索で、ソート条件を指定していないときや、
「sort=...
検索エンジンの基本
 柔軟かつ高速なフリーワード検索
大量データに対する検索が高速なのは

転置インデックス
のおかげ!

柔軟な検索が行えるのは

トークナイザと各種フィルタ
のおかげ!
多言語対応と柔軟な検索
 トークナイザと言語フィルタの充実
 数十か国もの言語をサポート
 example内にも多数の定義あり

 特に…
 日本語用のフィルタも多数あり、Solr3.6より標準で
「形態素解析」が利用できるようになっ...
トークナイザとフィルタ
 トークナイザ
 日本語用:JapaneseTokenizerFactory
 ホワイトスペース用:WhitespaceTokenizerFactory

 N-Gram:NGramTokenizerFactor...
フィルタ紹介
 文字フィルタ:MappingCharFilterFactory
 トークナイズする前に文字を置き替えるフィルタ

「タ ゙」(半角は濁点も1文字)
「タ ゙」を「ダ」と置き替えることが可能
 例:「斎」「齊」「齋」を「斉...
検索機能紹介
 ファセット(facet)
 ドリルダウン検索を実現するための機能
検索フォーム

検索
商品A+説明

衣料(84)
DIY(20)
ギフト(12)
家電(8)
ゲーム(4)
その他(2)

商品B+説明
商品C+説明
商品...
検索機能紹介
 ハイライタ(highlight)
 検索ワードの書式を変えるための機能
検索

Solr
3件ヒットしました

1:改訂新版Apache Solr入門
2:Apache Solr入門
3:Apache Solr 4 Cook...
Solrの運用・スケールについて
Solrのスケール
 検索システムを構築する際に規模の見積りは重要
 運用中のSolrが直面する課題…
 利用するユーザー数が増えた(QPSの増加)

 検索対象となるドキュメントが増えた
 検索クエリが複雑になった

クエリのレスポ...
検索性能低下の対策
 クエリ改善
 クエリチューニングが可能か調査する

 スケールアップ
 単純にSolrサーバを高性能化
 CPUパワーアップ、メモリ増設、HDD高速化など
 アプリの改修を行うことなく性能向上

 スケールア...
Solrの活用・導入について
Solrの活用
 どのようなところで活用できるか?(一例)
DBサーバの負荷軽減

検索システムのリプレース
新たなサービスへの利用
既存データの活用

アイディア次第で様々な利用が可能
データベースとの比較
 大量のデータ(レコード)から特定のデータを探すと
いう意味では、データベースも同じでは?
 RDBと検索エンジンとの主な違い
RDB

検索エンジン

柔軟かつ高速な
フリーワード検索

△

◎

データの形式

...
Solrの活用
 DBサーバの負荷軽減
 複雑な検索も増えた上に、アクセスも増加している
 フリーワードをLike検索していたが、そろそろ限界

条件検索&一覧表示だけでもSolrを使ってみる

検索フォーム

検索

商品A

商品A+...
Solrの活用
 DBサーバの補助機能として使う場合の注意
 Solrはトランザクション管理ができない
 在庫管理・・・×
 複数のユーザが更新する・・・×

 リアルタイム性が低い
 索引を作成→検索可能 となるため、タイムラグが...
Solrの活用
 検索システムのリプレース
 現行システムにも検索エンジンを使用している場合

Solrの利用も視野に入れてみる!
• 現在の検索エンジンではスペック不足
• ライセンス料金が高い
• 実現したい機能が利用できない

Sol...
Solrの活用
 新たなサービスへの利用
 現行のサイトにフリーワードの検索機能が無い
 検索機能を付与してみる。

顧客満足度が向上

 現行システムの検索を強化する
 DBを使った社内システムだが、キーワードにマッチせず、検索
結...
Solrの活用
 既存データの活用
 分析ツールとして活用してみる
 強力な形態素解析機を活用して、データを集計
 捨てていたログを検索機能を使って分析してみる

「検索エンジン」を使うことで
新たな気付きがあるかも知れない
ひとこと
 Apache Project なのでOSSの中でも信頼性が高く、国
内外で実績も多くあります。
 顧客がOSSを心配することもあるかもしれませんが…

 コミュニティが活発なのは強み!

 Solrは検索エンジンが初めての人...
ご清聴ありがとうございました

こちらもよろしく
お願いいたします!
Upcoming SlideShare
Loading in …5
×

はじめての検索エンジン&Solr 第13回Solr勉強会

20,385 views

Published on

第13回Solr勉強会資料
「はじめての検索エンジン&Solr」
検索エンジンの概要~Solrの活用まで
(発表時の未公開スライドあり)

Published in: Business
  • Be the first to comment

はじめての検索エンジン&Solr 第13回Solr勉強会

  1. 1. はじめての 検索エンジン&Solr 検索エンジンの概要~Solrの活用まで 第13回 Solr勉強会(2014/1/29) N.Suzuki
  2. 2. 自己紹介  氏名:鈴木 教嗣(スズキ ノリツグ)  所属:株式会社NTTデータCCS  著書:改訂新版 Apache Solr入門(技術評論社) [著]大谷 純, 阿部 慎一朗, 大須賀 稔, 北野 太郎, 平賀 一昭, 鈴木 教嗣 [監修] 株式会社リクルートテクノロジーズ, 株式会社ロンウイット 好評発売中!! 今回はデジタル版あり!!
  3. 3. 検索エンジンの話
  4. 4. 検索エンジンとは?(その1)  検索エンジンの用途  どのようなところで使われているか? Google ショッピング MSN Webページを検索 プロジェクトの資料 社内の共通資料 社内のファイルを検索 Web系 宿検索 飲食店検索 Yahoo! 図書館 サイト内を検索 Googleデスクトップ Windowsサーチ メーラ 個人のPC内を検索
  5. 5. 検索エンジンとは?(その2)  大量の文書データから特定の文書を探すツール  どのように探すか? フリーワードで探す カテゴリーで探す 日付や数値の範囲で探す 並べ替えて探す(安い順など) 検索するための多くの機能を持つ
  6. 6. 検索方式の話  主な検索方式 順次検索  データの先頭から文字列が合致するか探す方式 索引検索  索引を作成して、その索引から探す方式 索引:インデックスとも。Solrの場合は転置インデックスとも言う。 Chapter-1
  7. 7. 検索方式の話(順次検索) 順次検索  1冊の本で例えるなら…  先頭ページから順に単語を探すイメージ  その単語があるか無いかわからないが、最終ページまで検索  使われているところ  テキストエディタやブラウザのページ内検索  Linuxであればgrepコマンド、RDBのLike検索など  特徴  事前準備不要で検索可能  ページ内や小数のファイルなど小規模に向いている
  8. 8. 検索方式の話(索引検索) 索引検索 索引・Index  1冊の本で例えるなら…  本の末尾にある索引から単語から目的ページを探すイメージ  仮に…索引にそのワードがなければ、「ヒットなし」となる。  特徴  事前に索引を作成する必要がある  大規模にも対応し、検索速度が速い 多くの検索エンジンがこの方式を採用 Solrも索引を使用する検索方式
  9. 9. 検索エンジンの基本  転置インデックスについて  文章を特定の単位で区切ってインデックスのキーとし、 それに紐づく文書番号を保持したもの。 の 首都 は です 東京の天気は晴れです 東京 の 天気 は 晴れ です 1 首都 1 1,2 天気 東京 文書番号 日本 日本の首都は東京です 日本 Doc-2 単語 東京 Doc-1 2 晴れ 2 です 1,2 の 1,2 は 1,2
  10. 10. 検索エンジンの基本  転置インデックスから探す  転置インデックスを使って「首都」を検索してみる。 単語 文書番号 日本 1 首都 1 東京 1,2 天気 2 晴れ 2 です 1,2 の 1,2 は 1,2 Doc-1 日本の首都は東京です Doc-2 東京の天気は晴れです この方式なら 検索も速そう…。
  11. 11. 検索エンジンの基本  柔軟かつ高速なフリーワード検索 大量データに対する検索が高速なのは 転置インデックス のおかげ!
  12. 12. Apache Solrの話
  13. 13. Apache Solrとは  Solr = ソーラーと読む  全文検索エンジンサーバアプリケーション  JettyやTomcatなどで動作  2007.1 Apache projectのトップレベルプロジェクトに  現在はApache Lucene(ルシーン)のサブプロジェクト  Lucene=検索エンジンライブラリ (Solrのコアライブラリであり、elasticsearchも使用)  Solr(Lucene)のコミュニティ  コミュニティが活発であり、不具合への対応も早い  新機能への取り組みも盛ん Chapter-1
  14. 14. Solrの特徴  Full Javaで書かれているオープンソース  無償で利用可能であり、ソースも公開されている  容易に検索サーバが構築可能  数コマンドで検索サーバを利用できる  小規模から大規模まで対応  更に複数のスケールする機能・手法が利用できる  豊富な検索機能のサポート  高速化を可能にするキャッシュ機構  日本語にも対応したトークナイザやフィルタ Chapter-1
  15. 15. Solrの検索までの流れ  Indexの作成から検索まで データソース DB Webクロール フロントアプリ Solrサーバ 既存データ 検索 クエリ Webサーバ 結果 Index の 作成 Solr Index 各種ドキュメント Indexを作ることを、インデクシング、フィードなどと言う。 バッチサーバ ユーザー
  16. 16. Solrの機能紹介  検索  検索クエリ  スコアによるソート  スコアリングについて  多言語に対応した柔軟な検索  ファセット検索(Facet)/ 緯度経度検索(Spatial)  ハイライト機能 / グルーピング機能  スケールアウト  インデックスの複製:replication  分散横断検索:distributed  分散検索:Solr Cloud Chapter-4,7,8
  17. 17. Solrの検索クエリ  Solrの検索方法  Solr用の検索式(クエリ)を使用します。 検索条件を フィールド名 q= sort= rows= ソート条件 : 検索ワード フィールド名 (スペース) の形式で指定 asc / desc 1ページに表示させる件数を整数で指定  例えば…賃貸物件を探す。  説明文(note)に「築浅」を含み、かつ、家賃(price)が8万以下の 物件を延べ床面積(space)が広い順に20件表示 q=note:築浅 AND price:[*TO 80000] &sort=space desc &rows=20 Chapter-4
  18. 18. Solrの機能紹介(スコア)  スコアによるソート  スコア=検索条件の一致度の指数  検索条件によりマッチしたドキュメントが高スコア  Solrのスコアを算出する計算式  デフォルトではLuceneのスコア計算式  tf-idf のベクトルモデル   scoreq,d   coord q,d   queryNormq    tf t in d   idf t   t.getBoost   Normt,d  2 t in q 単語ヒット数 出現数 希少度
  19. 19. Solrの機能紹介(スコア)  単語ヒット数(coord)  検索したワードが幾つヒットしたか  例:OR検索した時などに影響 「ジャガイモ OR ベーコン OR タマネギ」で検索 ジャガイモ  「材料:ジャガイモ、ニンジン、豚肉」・・・1個 タマネギ  「材料:ナス、鶏ひき肉、ピーマン、タマネギ」・・・1個 ベーコン タマネギ  「材料:ベーコン、キャベツ、タマネギ」・・・2個 高スコア
  20. 20. Solrの機能紹介(スコア)  出現数(tf)  1フィールドにそのワードが何個あるか  例:「Solr」で検索 Solr  「Solrを使ってみよう」・・・1回 Solr Solr Solr  「SolrのSolrによるSolrのための検索」 ・・・3回 Solr Solr  「Solrって何?~検索エンジンSolr~」 ・・・2回 高スコア
  21. 21. Solrの機能紹介(スコア)  希少度(idf)  そのワードがどのくらい稀少か(Solrでは価値がある)  例:「ジャガイモ OR タマネギ」で検索 ジャガイモ  「材料:ジャガイモ、ニンジン、豚肉」 高スコア タマネギ  「材料:ナス、鶏ひき肉、ピーマン、タマネギ」 タマネギ  「材料:ベーコン、キャベツ、タマネギ」  各ワードのドキュメント数を比較  ジャガイモ・・・1ドキュメント  タマネギ・・・2ドキュメント ジャガイモの方が希少
  22. 22. Solrの機能紹介(スコア)  Solrのスコア  単語のヒット数、出現頻度、希少度の他、 フィールドの長さ(割合)、ブーストなどの要素を加味し てスコアリングを行っている  通常の検索で、ソート条件を指定していないときや、 「sort=score desc」を指定するとスコアでソート可能  fl=*,score とすることで、スコアの表示も可能  OSSなのでスコアの部分も自己流に改造も可能
  23. 23. 検索エンジンの基本  柔軟かつ高速なフリーワード検索 大量データに対する検索が高速なのは 転置インデックス のおかげ! 柔軟な検索が行えるのは トークナイザと各種フィルタ のおかげ!
  24. 24. 多言語対応と柔軟な検索  トークナイザと言語フィルタの充実  数十か国もの言語をサポート  example内にも多数の定義あり  特に…  日本語用のフィルタも多数あり、Solr3.6より標準で 「形態素解析」が利用できるようになった  Kuromojiの辞書も内包 形態素解析:日本語の文章を単語(各品詞)に切り分ける処理。多くは辞書を用いて行う。 Chapter-2
  25. 25. トークナイザとフィルタ  トークナイザ  日本語用:JapaneseTokenizerFactory  ホワイトスペース用:WhitespaceTokenizerFactory  N-Gram:NGramTokenizerFactory  フィルタ  文字フィルタ:MappingCharFilterFactory  品詞フィルタ:JapanesePartOfSpeechStopFilterFactory  禁止ワード:StopFilterFactory  大文字小文字:LowerCaseFilterFactory Chapter-2
  26. 26. フィルタ紹介  文字フィルタ:MappingCharFilterFactory  トークナイズする前に文字を置き替えるフィルタ 「タ ゙」(半角は濁点も1文字) 「タ ゙」を「ダ」と置き替えることが可能  例:「斎」「齊」「齋」を「斉」の に、「髙」を「高」に置き換える。  「斎藤さん」を「斉藤さん」でも探せる  「髙橋さん」を「高橋さん」でも探せる  例: 意外と便利です
  27. 27. 検索機能紹介  ファセット(facet)  ドリルダウン検索を実現するための機能 検索フォーム 検索 商品A+説明 衣料(84) DIY(20) ギフト(12) 家電(8) ゲーム(4) その他(2) 商品B+説明 商品C+説明 商品D+説明 コレ 文書をカテゴリで絞り込むのに有効 カテゴリはジャンル、地域、金額など様々 Chapter-4
  28. 28. 検索機能紹介  ハイライタ(highlight)  検索ワードの書式を変えるための機能 検索 Solr 3件ヒットしました 1:改訂新版Apache Solr入門 2:Apache Solr入門 3:Apache Solr 4 Cookbook コレ 検索したワードを目立たせる Chapter-4
  29. 29. Solrの運用・スケールについて
  30. 30. Solrのスケール  検索システムを構築する際に規模の見積りは重要  運用中のSolrが直面する課題…  利用するユーザー数が増えた(QPSの増加)  検索対象となるドキュメントが増えた  検索クエリが複雑になった クエリのレスポンスが遅くなるなど 検索性能の低下 QPS:Query par Secondの略。1秒間に何クエリ処理できるかという性能指数のひとつ
  31. 31. 検索性能低下の対策  クエリ改善  クエリチューニングが可能か調査する  スケールアップ  単純にSolrサーバを高性能化  CPUパワーアップ、メモリ増設、HDD高速化など  アプリの改修を行うことなく性能向上  スケールアウト  Solrはスケールアウトするための複数の機能を持つ  replication:インデックスの複製機能  distributed/Solr Cloud:分散検索機能 Chapter-8,9
  32. 32. Solrの活用・導入について
  33. 33. Solrの活用  どのようなところで活用できるか?(一例) DBサーバの負荷軽減 検索システムのリプレース 新たなサービスへの利用 既存データの活用 アイディア次第で様々な利用が可能
  34. 34. データベースとの比較  大量のデータ(レコード)から特定のデータを探すと いう意味では、データベースも同じでは?  RDBと検索エンジンとの主な違い RDB 検索エンジン 柔軟かつ高速な フリーワード検索 △ ◎ データの形式 正規化 非正規化 リアルタイム性 ◎ ○ トランザクション管理 ◎ × 一致度によるソート △ ◎ 検索式 SQL 専用クエリ 知名度 ◎ ○
  35. 35. Solrの活用  DBサーバの負荷軽減  複雑な検索も増えた上に、アクセスも増加している  フリーワードをLike検索していたが、そろそろ限界 条件検索&一覧表示だけでもSolrを使ってみる 検索フォーム 検索 商品A 商品A+説明 詳細 商品B+説明 詳細 商品C+説明 詳細 商品D+説明 詳細 詳細説明 検索→一覧表示までをSolrで作成 Solrから取得した「商品A」のコード値をDBで引くだけ
  36. 36. Solrの活用  DBサーバの補助機能として使う場合の注意  Solrはトランザクション管理ができない  在庫管理・・・×  複数のユーザが更新する・・・×  リアルタイム性が低い  索引を作成→検索可能 となるため、タイムラグが発生する  要件次第でラグを最小にすることは可能だが、RDBのような使 い方は不得意 データベースとのデータの整合性や お互いの機能の利点を活かす使い方が重要 検索エンジン特有の知識が必要
  37. 37. Solrの活用  検索システムのリプレース  現行システムにも検索エンジンを使用している場合 Solrの利用も視野に入れてみる! • 現在の検索エンジンではスペック不足 • ライセンス料金が高い • 実現したい機能が利用できない Solrならば… • スケールアウトが考慮されている • OSSなのでライセンス料不要 • 機能が多い&必要であれば自分で 機能追加ができる
  38. 38. Solrの活用  新たなサービスへの利用  現行のサイトにフリーワードの検索機能が無い  検索機能を付与してみる。 顧客満足度が向上  現行システムの検索を強化する  DBを使った社内システムだが、キーワードにマッチせず、検索 結果がゼロ件になることが多々あった。  検索エンジンの導入により、柔軟なフリーワードを実現  電話対応用のシステムだが、過去事例の検索に10秒くらい時間 がかかっていた。  検索エンジン導入により、レスポンスが1秒以下に! 業務効率の向上&顧客満足度も向上
  39. 39. Solrの活用  既存データの活用  分析ツールとして活用してみる  強力な形態素解析機を活用して、データを集計  捨てていたログを検索機能を使って分析してみる 「検索エンジン」を使うことで 新たな気付きがあるかも知れない
  40. 40. ひとこと  Apache Project なのでOSSの中でも信頼性が高く、国 内外で実績も多くあります。  顧客がOSSを心配することもあるかもしれませんが…  コミュニティが活発なのは強み!  Solrは検索エンジンが初めての人でも導入しやすい  改訂新版 Apache Solr入門 もあります!  身近にサポートしてくれる人も??(勉強会も開催) これを機に、またSolrを盛り上げましょう!!
  41. 41. ご清聴ありがとうございました こちらもよろしく お願いいたします!

×