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