2012 11 29 groonga 勉強会 発表資料

825 views

Published on

groonga勉強会「全文検索エンジンgroongaを囲む夕べ3」で、発表しました。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
825
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2012 11 29 groonga 勉強会 発表資料

  1. 1. 「外資就活ドットコム」のサイト内検索を 作るときに考えたこと Yoshiyuki Onishi Director / CTO Howtelevision, Inc.
  2. 2. 外資就活ドットコムとは外資就活ドットコムでは、グローバルプロフェッショナルを目指す上位校学生にとって必要なトップ企業の選考情報・イベント情報・業界研究に役立つコラムをタイムリーに提供しております・月間1,100,000 PV150,000 UU
  3. 3. どういったコンテンツがあるのかコラム記事がはてなブックマークのホッテントリに
  4. 4. groonga 導入以前当初 WordPress のブログとして運営開始、WordPress の検索機能サイトの成長に伴い、コンテンツの種類が増加
  5. 5. コンテンツの種類 特集● コラム● 選考情報 各企業の採用情報 企業研究
  6. 6. 検索対象コンテンツを整理する● 検索条件 ○ priority ○ date ○ マッチング対象● 検索結果表示 ○ url path ○ タイトル ○ スニペット ○ DB のテーブル, 抽出条件
  7. 7. 検索対象となるコンテンツの分類検索項目 ページ種別 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 本文
  8. 8. 検索対象となるコンテンツの分類結果の表示に用いる項目 種別 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 <記事タイトル> 本文からキーワード 周辺を抜粋
  9. 9. 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 ShortTexttable_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つのインデックスを付与
  10. 10. 検索クエリ $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";
  11. 11. 記事の更新/削除とインデックス反映 WebApp query over HTTP groonga (cakephp) httpd groonga DB Job Queue post ID (TheSchwartz) add queue WordPress DB (MySQL)
  12. 12. 検索結果の例:企業名 
  13. 13. 検索結果の例:業界名 
  14. 14. アプリケーション側で実装● ページング● スニペット, 検索ワードのハイライト● 種別をラベルとして表示 ○ 募集情報 / コラム / 企業研究 / 特集 / 採用情報
  15. 15. ご清聴ありがとうございました
  16. 16. まとめ● 検索対象を整理する● 検索結果の表示 ○ 何を表示するか ○ 並び順● 検索クエリ

×