2012 11 29 groonga 勉強会 発表資料
DESCRIPTION
groonga勉強会「全文検索エンジンgroongaを囲む夕べ3」で、発表しました。TRANSCRIPT
![Page 1: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/1.jpg)
「外資就活ドットコム」のサイト内検索を
作るときに考えたこと
Yoshiyuki OnishiDirector / CTO Howtelevision, Inc.
![Page 2: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/2.jpg)
外資就活ドットコムとは
外資就活ドットコムでは、グローバルプロフェッショナルを目指す上位校学生にとって必要なトップ企業の選考情報・イベント情報・業界研究に役立つコラムをタイムリーに提供しております
・月間1,100,000 PV150,000 UU
![Page 3: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/3.jpg)
どういったコンテンツがあるのか
コラム記事がはてなブックマークのホッテントリに
![Page 4: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/4.jpg)
groonga 導入以前
当初 WordPress のブログとして運営開始、WordPress の検索機能
サイトの成長に伴い、コンテンツの種類が増加
![Page 5: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/5.jpg)
コンテンツの種類
● コラム● 選考情報
各企業の採用情報 企業研究
特集
![Page 6: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/6.jpg)
検索対象コンテンツを整理する
● 検索条件○ priority○ date○ マッチング対象
● 検索結果表示○ url path○ タイトル○ スニペット○ DB のテーブル, 抽出条件
![Page 7: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/7.jpg)
検索対象となるコンテンツの分類
検索項目
ページ種別 priority マッチング対象 テーブル 抽出条件
コラム特集 1 タイトル本文
posts post_type = 'special' AND post_name LIKE 'column_%'
採用情報ページ(企業広告)
2 企業名, 概要 com_page status = 'publish' AND id > 1
企業研究 3 企業名 company_study
コラム 4 タイトル本文
posts post_type = 'post' AND post_status = 'publish'
募集情報 4 タイトル本文
recruiting_info status = 'publish'
![Page 8: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/8.jpg)
検索対象となるコンテンツの分類
結果の表示に用いる項目
種別 url path type タイトル スニペット
コラム特集 /cpecail/column_{id} special <タイトル> post_content からショートタグを除いたもの
採用情報ページ(企業広告)
/company/{id} company_page <企業名>の採用情報 会社概要
企業研究 /company_study/{id} company_study <企業名>の企業研究 のインターン・新卒採用の募集情報、選考対策、口コミ、給料、採用ページを集めた関連リンク集などを掲載。
コラム /archives/{id} column <記事タイトル> 本文からキーワード周辺を抜粋
募集情報 /recruiting_info/view/{id} recruiting_info <記事タイトル> 本文からキーワード周辺を抜粋
![Page 9: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/9.jpg)
groonga インデックスのスキーマ定義
table_create --name Item --flags TABLE_HASH_KEY --key_type ShortTextcolumn_create --table Item --name title --flags COLUMN_SCALAR --type ShortTextcolumn_create --table Item --name content --flags COLUMN_SCALAR --type Textcolumn_create --table Item --name post_date --flags COLUMN_SCALAR --type Timecolumn_create --table Item --name priority --flags COLUMN_SCALAR --type Int32column_create --table Item --name type --flags COLUMN_SCALAR --type ShortText
table_create --name Bigram --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigramcolumn_create --table Bigram --name title_index --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION --type Item --source title,content
● N-gram● 複数のカラム(タイトル、本文)に対して1つのインデックスを付与
![Page 10: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/10.jpg)
検索クエリ
$qs = http_build_query( array( 'table' => 'Item', 'match_columns' => 'title||content', 'query' => $args['q'], 'output_columns' => '_key,type,title,content,_score,post_date', 'sortby' => 'priority,-post_date,_score', 'limit' => $per_page, 'offset' => $offset ) );
$url = "http://xxx.xxxxxx.xxx:port/d/select?$qs";
![Page 11: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/11.jpg)
記事の更新/削除とインデックス反映
WebApp(cakephp)
WordPress
Job Queue(TheSchwartz)
groongahttpd groonga
DB
DB(MySQL)
add queue
query over HTTP
post ID
![Page 12: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/12.jpg)
検索結果の例:企業名
![Page 13: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/13.jpg)
検索結果の例:業界名
![Page 14: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/14.jpg)
アプリケーション側で実装
● ページング
● スニペット, 検索ワードのハイライト
● 種別をラベルとして表示○ 募集情報 / コラム / 企業研究 / 特集 / 採用情報
![Page 15: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/15.jpg)
ご清聴ありがとうございました
![Page 16: 2012 11 29 groonga 勉強会 発表資料](https://reader034.vdocuments.net/reader034/viewer/2022042602/5599b26a1a28abe80b8b4577/html5/thumbnails/16.jpg)
まとめ
● 検索対象を整理する
● 検索結果の表示○ 何を表示するか○ 並び順
● 検索クエリ