Submit Search
Upload
Elasticsearch for Hackadoll
•
44 likes
•
14,852 views
mosa siru
Follow
ハッカドールにおけるElasitcsearch活用法。 DeNA社内向けに発表したものです。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 61
Recommended
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
Narihiro Nakamura
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
VYATTA USERS MEETING Spring 2014 - JAZUG
VYATTA USERS MEETING Spring 2014 - JAZUG
Keiji Kamebuchi
watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話
Shuichi Tsutsumi
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Daisuke Masubuchi
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
JustSystems Corporation
2016 09-03 jazug
2016 09-03 jazug
Miho Kurosawa
Recommended
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
Narihiro Nakamura
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
Salesforce Developers Japan
VYATTA USERS MEETING Spring 2014 - JAZUG
VYATTA USERS MEETING Spring 2014 - JAZUG
Keiji Kamebuchi
watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話
Shuichi Tsutsumi
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Daisuke Masubuchi
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
JustSystems Corporation
2016 09-03 jazug
2016 09-03 jazug
Miho Kurosawa
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
Yosuke Hiraishi
Core Graphics on watchOS 2
Core Graphics on watchOS 2
Shuichi Tsutsumi
Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発
terahide
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
Kosuke Ogawa
Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9
Shuichi Tsutsumi
Face APIで開発する時に使っている7つの道具
Face APIで開発する時に使っている7つの道具
Kazuyuki Miyake
入門者の方向け Azure PlayFab の簡単な紹介
入門者の方向け Azure PlayFab の簡単な紹介
YutoNishine
現実的な「WordPress on Azure App Service」 クイックスタート
現実的な「WordPress on Azure App Service」 クイックスタート
Kazuyuki Miyake
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
Shuichi Tsutsumi
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
YutoNishine
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
Shuntaro Saiba
OWASP_Kyushu_Local_Chapter_Meeting_7th
OWASP_Kyushu_Local_Chapter_Meeting_7th
ShuyaMotouchi1
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Osoljp201204
Osoljp201204
Masataka Tsukamoto
環境が変わって最近知ったもの #hachiojipm
環境が変わって最近知ったもの #hachiojipm
鉄次 尾形
さくらのクラウドアップデート情報2016年7月版
さくらのクラウドアップデート情報2016年7月版
さくらインターネット株式会社
Rubyによるクローラー開発
Rubyによるクローラー開発
しくみ製作所
As you like, PHP on Azure - お気に召すままに!
As you like, PHP on Azure - お気に召すままに!
Kazumi IWANAGA
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
YutoNishine
Getting started with Handoff
Getting started with Handoff
Yuichi Yoshida
Klabの梅雨対策
Klabの梅雨対策
Hideyuki TAKEI
Hachiojipm31
Hachiojipm31
Junichiro Suzuki
More Related Content
What's hot
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
Yosuke Hiraishi
Core Graphics on watchOS 2
Core Graphics on watchOS 2
Shuichi Tsutsumi
Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発
terahide
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
Kosuke Ogawa
Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9
Shuichi Tsutsumi
Face APIで開発する時に使っている7つの道具
Face APIで開発する時に使っている7つの道具
Kazuyuki Miyake
入門者の方向け Azure PlayFab の簡単な紹介
入門者の方向け Azure PlayFab の簡単な紹介
YutoNishine
現実的な「WordPress on Azure App Service」 クイックスタート
現実的な「WordPress on Azure App Service」 クイックスタート
Kazuyuki Miyake
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
Shuichi Tsutsumi
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
YutoNishine
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
Shuntaro Saiba
OWASP_Kyushu_Local_Chapter_Meeting_7th
OWASP_Kyushu_Local_Chapter_Meeting_7th
ShuyaMotouchi1
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Osoljp201204
Osoljp201204
Masataka Tsukamoto
環境が変わって最近知ったもの #hachiojipm
環境が変わって最近知ったもの #hachiojipm
鉄次 尾形
さくらのクラウドアップデート情報2016年7月版
さくらのクラウドアップデート情報2016年7月版
さくらインターネット株式会社
Rubyによるクローラー開発
Rubyによるクローラー開発
しくみ製作所
As you like, PHP on Azure - お気に召すままに!
As you like, PHP on Azure - お気に召すままに!
Kazumi IWANAGA
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
YutoNishine
Getting started with Handoff
Getting started with Handoff
Yuichi Yoshida
What's hot
(20)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
Core Graphics on watchOS 2
Core Graphics on watchOS 2
Spring bootで学ぶ初めてのwebアプリ開発
Spring bootで学ぶ初めてのwebアプリ開発
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
自作アプリを Apple Watch対応した話 〜FastCheckin編〜
Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9
Face APIで開発する時に使っている7つの道具
Face APIで開発する時に使っている7つの道具
入門者の方向け Azure PlayFab の簡単な紹介
入門者の方向け Azure PlayFab の簡単な紹介
現実的な「WordPress on Azure App Service」 クイックスタート
現実的な「WordPress on Azure App Service」 クイックスタート
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
5分で入門するAzure PlayFab
5分で入門するAzure PlayFab
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なオジサンだらけのエンプラ金融PJにAnsibleを導入してみた
OWASP_Kyushu_Local_Chapter_Meeting_7th
OWASP_Kyushu_Local_Chapter_Meeting_7th
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Osoljp201204
Osoljp201204
環境が変わって最近知ったもの #hachiojipm
環境が変わって最近知ったもの #hachiojipm
さくらのクラウドアップデート情報2016年7月版
さくらのクラウドアップデート情報2016年7月版
Rubyによるクローラー開発
Rubyによるクローラー開発
As you like, PHP on Azure - お気に召すままに!
As you like, PHP on Azure - お気に召すままに!
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
リアルタイムコマンドバトルのゲームで PlayFab を使ってみた
Getting started with Handoff
Getting started with Handoff
Similar to Elasticsearch for Hackadoll
Klabの梅雨対策
Klabの梅雨対策
Hideyuki TAKEI
Hachiojipm31
Hachiojipm31
Junichiro Suzuki
さくらのクラウドを使ってみよう
さくらのクラウドを使ってみよう
法林浩之
Pepper tech festival_2014_技術セッション基本
Pepper tech festival_2014_技術セッション基本
Atelier Akihabara
20151213 tokushimaapp
20151213 tokushimaapp
健一 辰濱
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
Shuji Yamada
qpsutdy 201307 LT
qpsutdy 201307 LT
Tomohiro Ikeda
SORACOM UG Tokyo #9 2018年のスタートはIoT LT大会 | 知られざる#ソラコムサンタの裏側
SORACOM UG Tokyo #9 2018年のスタートはIoT LT大会 | 知られざる#ソラコムサンタの裏側
SORACOM,INC
What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7
Akinori Musha
スクレイピングその後
スクレイピングその後
Tomoki Hasegawa
shinken monitoringについて真剣に調べてみた結果
shinken monitoringについて真剣に調べてみた結果
Tsuyoshi Torii
Pythonでジョブキューシステムを作った
Pythonでジョブキューシステムを作った
Ryota Suenaga
20180613 ガチラボ vol.4
20180613 ガチラボ vol.4
Satoshi Fujimoto
elixirを使ったゲームサーバ
elixirを使ったゲームサーバ
Hidetaka Kojo
iOS6時代のTwitter / Facebook連携
iOS6時代のTwitter / Facebook連携
Masahiro Murakami
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
Hiromu Yakura
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
Masahiro NAKAYAMA
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
Tsuyoshi Yamamoto
[Dots.]taiga
[Dots.]taiga
Tatsunori Nishikori
Similar to Elasticsearch for Hackadoll
(20)
Klabの梅雨対策
Klabの梅雨対策
Hachiojipm31
Hachiojipm31
さくらのクラウドを使ってみよう
さくらのクラウドを使ってみよう
Pepper tech festival_2014_技術セッション基本
Pepper tech festival_2014_技術セッション基本
20151213 tokushimaapp
20151213 tokushimaapp
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
qpsutdy 201307 LT
qpsutdy 201307 LT
SORACOM UG Tokyo #9 2018年のスタートはIoT LT大会 | 知られざる#ソラコムサンタの裏側
SORACOM UG Tokyo #9 2018年のスタートはIoT LT大会 | 知られざる#ソラコムサンタの裏側
What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7
スクレイピングその後
スクレイピングその後
shinken monitoringについて真剣に調べてみた結果
shinken monitoringについて真剣に調べてみた結果
Pythonでジョブキューシステムを作った
Pythonでジョブキューシステムを作った
20180613 ガチラボ vol.4
20180613 ガチラボ vol.4
elixirを使ったゲームサーバ
elixirを使ったゲームサーバ
iOS6時代のTwitter / Facebook連携
iOS6時代のTwitter / Facebook連携
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
クラウドセキュリティ基礎 @セキュリティ・ミニキャンプ in 東北 2016 #seccamp
JJUG CCC 20150411 grails3 Spring-boot
JJUG CCC 20150411 grails3 Spring-boot
[Dots.]taiga
[Dots.]taiga
More from mosa siru
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
KYC and identity on blockchain
KYC and identity on blockchain
mosa siru
マイニングプールの収益配分と攻撃手法
マイニングプールの収益配分と攻撃手法
mosa siru
Payment Channel Introduction
Payment Channel Introduction
mosa siru
Go, memcached, microservices
Go, memcached, microservices
mosa siru
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービス
mosa siru
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
lua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Request
mosa siru
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)
mosa siru
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
mosa siru
how to make twitter list automatically
how to make twitter list automatically
mosa siru
More from mosa siru
(13)
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
KYC and identity on blockchain
KYC and identity on blockchain
マイニングプールの収益配分と攻撃手法
マイニングプールの収益配分と攻撃手法
Payment Channel Introduction
Payment Channel Introduction
Go, memcached, microservices
Go, memcached, microservices
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービス
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
lua_nginx_module JSON-RPC 2.0 Batch Request
lua_nginx_module JSON-RPC 2.0 Batch Request
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
how to make twitter list automatically
how to make twitter list automatically
Recently uploaded
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
Recently uploaded
(12)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
Elasticsearch for Hackadoll
1.
Elasticsearch for Hackadoll 2015/08/31
@mosa_siru 1
2.
自己紹介 2
3.
@mosa_siru • 「もさ」って呼んでください • 「ボンバーマンの人」
って認 識いただければ大丈夫です • もし興味があれば動画をご覧くださ い http://www.nicovideo.jp/watch/ sm13612359 • 最近はSplatoonもやってます 3
4.
@mosa_siru at DeNA •
1年目: 新卒。プラットフォームでAPIとか運用 • 2年目: ハッカドール 立ち上げからジョイン • サーバーサイドを担当 • 3年目: Web版ハッカドールを作ったり、メ ジャーアップデートしたり 4
5.
ハッカドール サーバーサイド • なんかたくさん作った
with @xaicron , kommy • API (100個) • ニュース配信APIからゲームの賞品付与APIま で、機能ありすぎて笑える • Worker (70個) • Crawler, Remote Notification, etc.. • 非同期処理やバッチ処理する君 5
6.
ハッカドール サーバーサイド • Web •
Web版でAngular実戦投入したけど良さげでした • リコメンドシステム • 分析基板部と連携 • OPE(管理ツール) • ImageProxy(画像変換サーバー) • Nginx Module, etc… 6
7.
アジェンダ 7
8.
アジェンダ 1. ハッカドールって? 2. Elasticsearch活用法 A.
検索 B. 関連記事 C. リコメンド 8
9.
1. ハッカドールって? 9
10.
ハッカドールって? • アニメ・マンガ・ゲームなど、 オタク系の記事のみを扱った ニュース配信アプリ • おすすめ商品、イベントも届 けてくれる •
使えば使うほど学習していく 10
11.
ハッカドールって? • ゲーミフィケーション • というかゲームできる •
オタクユーザーに刺さる機能 が満載! 11
12.
2014夏コミに合わせてリリース 12
13.
• 高リターンレート • 高ヘビーユーザー率 高いユーザー評価 13
14.
Apple 2014 Best
App! 14
15.
2015 コミケ/アニサマ 15
16.
アニメ化! 祝・アニメ化!
17.
2. Elasticsearch活用法 17
18.
ハッカドールでのES活用法 (A)検索 (B)関連記事 (C)キャリブレーション 18
19.
A. 検索 19
20.
ハッカドールでの検索機能 20 • 最新ニュース、新商品、イベント情報を検索できます • というのはかんたんですが…
21.
最高の検索のために
22.
まずは検索に使うためにも、 記事にタグを付けたい 22
23.
とりあえずmecabを用いて 記事を形態素解析 23
24.
最高の辞書が必要 24
25.
最高のオタク辞書を作る • Wikipedia, ニコニコ大百科からオタク系キー ワード一覧を取得 •
手動で最新キーワードを管理ツールから登録 • 詳細は去年つくったスライド「 るリコメ ンドシステムの裏事情」をご覧ください 25
26.
最高のシノニム 26
27.
シノニムと正規化 • 表記揺れや同義語を吸収したい • まず分かち書きされたものに対して各種正規化 •
Unicode正規化 (NFC) • 伸ばし棒 − ∼ ∼ ─ ━ ╌ ╍ ╴ ╶ ╸ ╺ ー - - – — ― − ー => ー • 連続するものを1つに • single quote ‘ ’ => ' • 全角英数字 A => A • 英数字大文字 A => a • 半角カタカナ アア => アア 27
28.
シノニムと正規化 • 各種シノニムに変換 • 管理ツールで登録しておく 28
29.
最高のフィルター • あまりにも関係なさそうなタグはフィルタする (ブ ラックリスト) •
例:「こんにちは」「名無しさん」 • 正規表現でまとめて弾く • 例:d+時d+分 • ブラックリストも管理ツール上で管理 29
30.
ここまでのまとめ • クローリングした記事をオタク辞書で分かち 書きし、正規化・シノニム変換を施し、フィ ルタしたものをタグとする • ようやくできたタグをESにPOST 30
31.
ちなみに • これらのマスターデータの運用は辛い • A
→ Bへのシノニムが登録されたら、全てのタグAを 持つ記事のタグを再計算してESに再登録させる仕組み • シノニムが削除された場合は? • 辞書やシノニムをESに担当させることもできるが、辞書 やシノニム更新のたびにreindexingが必要だったり辛そ うなのでやってない 31
32.
検索クエリ 32
33.
検索クエリ (ようやくESの話) 1. クエリ「まどマギ」で検索したとする 2.
クエリをシノニム変換:「まどマギ」=> 「魔法少女まどか☆マギカ」 3. まずは完全一致でタグに当てる (terms query) 4. あるいは部分一致で全文に当てる (query_string query) 5. 最後に除外フィルタを通して最新順で返す • 例:ベイジアンフィルタにより「えっちな記事」判定されたものを外す • 例:各種ユーザーフィルタ(まとめサイトOFFなど) • なお最新順で返す検索仕様は簡単(スコアリングを考えなくて良い) 33
34.
検索クエリ 4. 「あるいは部分一致で全文に当てる」とは • 目的:クエリ「魔法少女」でも「魔法少女まどか☆マギカ」に当たるよ うにしたい •
analyzerのあるフィールドに query_string query • ただし一方「魔法少女」で 「少女」に当たらない よう”” で囲んでいる => クエリは分かち書きされない 34
35.
検索クエリ (ページング) • やっぱりlimit
offsetは使いたくない • n+1件取得して、n+1件目の記事のtimestamp, idを pageTokenとしてレスポンスに含める • n+1件目は結果から除外する • クライアントはページング時のリクエストに pageTokenを入れる • サーバーはpageToken以降の記事をn+1件取得する (以下繰り返し) 35
36.
検索補完 36
37.
検索補完 • 補完により、入力補助はもちろん表記揺れリ スクも解消できる • 実装はまさかのMySQL!likeで前方一致!w •
あらかじめbatchで全キーワードの登場数を 管理するテーブルを作っている (TDIDFのDF) • nginx proxy cacheでフロントキャッシュして 負荷軽減 • カジュアルに使えるのでおすすめ 37
38.
検索補完 • 読みがな情報もいれておくことで、ひらがな から漢字への補完も可能 • 読みがなはニコニコ大百科から取得したり、 管理ツールから入力 38
39.
最高の検索になれたか?
40.
まだまだできるはず • 心地よく、違和感なく使えるレベルであるのは間違いない • が、まだGoogleにはなれてない •
Fussy検索 • 「もしかして」 • And検索の補完 • “AND” “OR” “NOT” 文への対応 • シノニムやらもろもろと帳尻あわせつつ入れるの大変。やっぱり自然言 語まわりはむずかしい(こなみかん 40
41.
おまけ:検索活用法 41
42.
ウォッチリスト 42 • 好きなタイトル名などを登録しておくと、 そのキーワードを含んだニュースが出る たびに教えてくれる(RSS like) •
オタクであるほど、好きな作品のニュー スは逃したくない • OR検索でElasticsearchから取得 • 検索を作りこんだおかげで可能となっ た
43.
B. 関連記事 43
44.
関連記事 • その記事に関連する記事を教 えてくれる機能 44 ニュース記事 商品記事
イベント記事 ニュース記事 商品記事 イベント記事
45.
関連記事 • 基本は先ほど紹介したタグ情報をもとに、ESのmlt (more like
this) クエリで近い記事を出しています • mlt:「似た」ドキュメントを探してくれるイケメン機能 です • 一致するタグを沢山もっている記事ほどスコアが高く なる • 全部”タグ”で完結するので、ニュース/商品/イベント記事 をまたいだマッチングが可能 45
46.
関連記事(クエリ) 1. その記事のタグ情報を取得 2. mltスコアを計算 3.
新しい記事を重視するために、decayを掛け あわせて最終スコアとする (function_score query) 4. 除外フィルタを通し、スコアが高い順に表示 46
47.
関連記事(クエリ) 2. mltスコアを計算 • 複数回登場するタグは、その回数分だけ 並べている 47
48.
参考:mltのカスタマイズ箇所 name description default percent_terms_to_match このパーセント以上タグが マッチしないと似ていると みなされない 0.30 min_term_freq 最低この個数はタグがマッチしない といけない 2 min_doc_req
全ドキュメント内でこの個数以上登 場するタグのみ用いる 5 ニュース、商品、イベント記事のタグの特性をもとに、 微妙に値をカスタマイズしている
49.
関連記事(クエリ) • 記事の最新度(decay)と掛 けあわせて最終スコアと する ○日古くなると●倍のスコアとな る曲線を指定できるが、パラメー ター調整はわりと職人技(辛い) 49 設定例
50.
C. キャリブレーション 50
51.
キャリブレーション 初回起動時に、ユーザーの嗜好を取得して記事を表示 51
52.
キャリブレーションの流れ 1. ユーザーの好きなカテゴリから、好きそ うなキーワード群とそれぞれの重みを算 出 2. 一部をユーザーがオプトアウトし、最終 的な”taste”とする 3.
tasteをESに投げ、初回記事を生成 4. 類似記事の排除をして記事確定 (詳細は略) 52
53.
キャリブレーション(クエリ) 53 1. tasteをbool query化 •
boost値はキーワード ごとのスコア(重み) • boost値が高いタグが たくさんマッチする記 事はスコアが高い
54.
キャリブレーション(クエリ) 54 2. 最新度, 記事のPV数など で最終スコア調整 3.
各種フィルタを通し、ス コアが高い順に返す
55.
簡易リコメンドまで出来る僥倖…! 55
56.
その他 56
57.
その他活用箇所 • ユーザーアクティビティをESに入れて、 Kibanaで見たり人気記事を算出したり • APIアクセスログのES化 (これはBigQueryにするかも) 57
58.
まとめ 58
59.
ES便利、だけど • 検索、関連記事、ちょっとしたリコメンド …いろいろできる! • でも少し込み入ったことをするには沢山考 えることがあって辛い時もある •
やっぱりサービス作りは、ユーザーのた めに泥臭く畑を耕すこと 59
60.
その他ESへの雑感 • 速度面や安定性は流石の一言 • GCによるCPUがあれですが •
機能が豊富すぎてびびる • 細かいパラメーターチューニングができる分、凝りだすと逆に 辛い • 公式ドキュメントのクエリ解説は正直わかりにくい • レスポンスが書いてなかったりなど • SQLに慣れすぎた人類には早かった 60
61.
おわり 61 @mosa_siru