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

Post on 28-May-2015

8.798 Views

Category:

Business

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

はじめての検索エンジン&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