はじめての
検索エンジン&Solr
検索エンジンの概要~Solrの活用まで
第13回 Solr勉強会(2014/1/29)

N.Suzuki
自己紹介
 氏名:鈴木 教嗣(スズキ ノリツグ)
 所属:株式会社NTTデータCCS
 著書:改訂新版 Apache Solr入門(技術評論社)
[著]大谷 純, 阿部 慎一朗, 大須賀 稔, 北野 太郎, 平賀 一昭, 鈴木 教嗣
[監修] 株式会社リクルートテクノロジーズ, 株式会社ロンウイット

好評発売中!!
今回はデジタル版あり!!
検索エンジンの話
検索エンジンとは?(その1)
 検索エンジンの用途
 どのようなところで使われているか?
Google

ショッピング

MSN
Webページを検索

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

Web系

宿検索

飲食店検索

Yahoo!

図書館

サイト内を検索

Googleデスクトップ
Windowsサーチ

メーラ

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

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

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

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

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

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

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

 使われているところ
 テキストエディタやブラウザのページ内検索
 Linuxであればgrepコマンド、RDBのLike検索など

 特徴
 事前準備不要で検索可能
 ページ内や小数のファイルなど小規模に向いている
検索方式の話(索引検索)
索引検索

索引・Index

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

 特徴
 事前に索引を作成する必要がある
 大規模にも対応し、検索速度が速い

多くの検索エンジンがこの方式を採用
Solrも索引を使用する検索方式
検索エンジンの基本
 転置インデックスについて
 文章を特定の単位で区切ってインデックスのキーとし、
それに紐づく文書番号を保持したもの。

の

首都

は

です

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

の

天気

は

晴れ

です

1

首都

1
1,2

天気

東京

文書番号

日本

日本の首都は東京です
日本

Doc-2

単語

東京

Doc-1

2

晴れ

2

です

1,2

の

1,2

は

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

文書番号

日本

1

首都

1

東京

1,2

天気

2

晴れ

2

です

1,2

の

1,2

は

1,2

Doc-1

日本の首都は東京です

Doc-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

Webクロール

フロントアプリ

Solrサーバ

既存データ

検索
クエリ

Webサーバ

結果

Index
の
作成

Solr Index

各種ドキュメント
Indexを作ることを、インデクシング、フィードなどと言う。

バッチサーバ

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

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

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

 スケールアウト
 インデックスの複製:replication

 分散横断検索:distributed
 分散検索:Solr Cloud
Chapter-4,7,8
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
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

単語ヒット数

出現数

希少度
Solrの機能紹介(スコア)
 単語ヒット数(coord)
 検索したワードが幾つヒットしたか
 例:OR検索した時などに影響
「ジャガイモ OR ベーコン OR タマネギ」で検索
ジャガイモ
 「材料:ジャガイモ、ニンジン、豚肉」・・・1個
タマネギ
 「材料:ナス、鶏ひき肉、ピーマン、タマネギ」・・・1個
ベーコン
タマネギ
 「材料:ベーコン、キャベツ、タマネギ」・・・2個

高スコア
Solrの機能紹介(スコア)
 出現数(tf)
 1フィールドにそのワードが何個あるか
 例:「Solr」で検索
Solr
 「Solrを使ってみよう」・・・1回
Solr Solr
Solr
 「SolrのSolrによるSolrのための検索」 ・・・3回
Solr
Solr
 「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+説明

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

商品B+説明
商品C+説明
商品D+説明

コレ
文書をカテゴリで絞り込むのに有効
カテゴリはジャンル、地域、金額など様々

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

商品A+説明

詳細

商品B+説明

詳細

商品C+説明

詳細

商品D+説明

詳細

詳細説明

検索→一覧表示までをSolrで作成

Solrから取得した「商品A」のコード値をDBで引くだけ
Solrの活用
 DBサーバの補助機能として使う場合の注意
 Solrはトランザクション管理ができない
 在庫管理・・・×
 複数のユーザが更新する・・・×

 リアルタイム性が低い
 索引を作成→検索可能 となるため、タイムラグが発生する
 要件次第でラグを最小にすることは可能だが、RDBのような使
い方は不得意

データベースとのデータの整合性や
お互いの機能の利点を活かす使い方が重要
検索エンジン特有の知識が必要
Solrの活用
 検索システムのリプレース
 現行システムにも検索エンジンを使用している場合

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

Solrならば…

• スケールアウトが考慮されている
• OSSなのでライセンス料不要
• 機能が多い&必要であれば自分で
機能追加ができる
Solrの活用
 新たなサービスへの利用
 現行のサイトにフリーワードの検索機能が無い
 検索機能を付与してみる。

顧客満足度が向上

 現行システムの検索を強化する
 DBを使った社内システムだが、キーワードにマッチせず、検索
結果がゼロ件になることが多々あった。
 検索エンジンの導入により、柔軟なフリーワードを実現

 電話対応用のシステムだが、過去事例の検索に10秒くらい時間
がかかっていた。
 検索エンジン導入により、レスポンスが1秒以下に!

業務効率の向上&顧客満足度も向上
Solrの活用
 既存データの活用
 分析ツールとして活用してみる
 強力な形態素解析機を活用して、データを集計
 捨てていたログを検索機能を使って分析してみる

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

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

 Solrは検索エンジンが初めての人でも導入しやすい
 改訂新版 Apache Solr入門 もあります!

 身近にサポートしてくれる人も??(勉強会も開催)

これを機に、またSolrを盛り上げましょう!!
ご清聴ありがとうございました

こちらもよろしく
お願いいたします!

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