おでかけスポット検索
のむずかしさ
- Holidayを支える検索技術
Cookpad TechConf 2016
自己紹介
• 内藤 雄介(ないとうゆうすけ)
• おでかけプラン作成・共有

サービス「Holiday」の開発
• サーバサイドの開発を担当
いつもの休日のおでかけを
楽しくすることで
人生を豊かにする
Holidayでの検索
Holidayでの検索
! フリーワード
Holidayでの検索
!
どこで だれとx
中目黒 デート
Holidayでの検索
どこで だれとx
いつ
! 中目黒 冬
Holidayでの検索
どこで だれとx
いつ
なにを
! 中目黒 散歩
Holidayでの検索
! どこで
これまでは...
=> 全文検索
全文検索だけでは
うまくいかなかった
「中目黒、中目黒にない」問題
ユーザが考える「中目黒」
• 目黒川沿いのおしゃれなカフェ・雑貨点が

集まっているエリア
• 中目黒駅前の商店街エリア
ユーザが考える「中目黒」
住所としての「中目黒」
2つの「中目黒」の差
「駅周辺を探せない」問題
駅名で検索するということは
• 「駅から『徒歩圏内』で『なるべく近く』

で遊べるところないかな」と考えていそう
• 住所文字列から距離は測れない
=> 結果順に反映できない
課題
• スポット名・住所からの全文検索では...
• 一般認識とは違ったエリアを探してしまう
• 駅からの距離を結果に反映できない
「全文検索」x「地理検索」
Elasticsearch
これまで
中目黒 カフェ! 中目黒 カフェ
改善後
カフェ
中目黒
" { 位置情報 }
! 中目黒 カフェ
AND
or
must
Elasticsearchでの地理検索
• Geo Distance Filter
• Geo Polygon Filter
• Geo Bounding Box Filter
※Elasticsearch2系ではQueryとして実装されてます
Geo Distance Filter
• 中心点からの距離で絞り
込む
• 駅周辺のスポットを探す
などのケースに適してい
る
Geo Polygon Filter
• 多角形で範囲を指定する
• 複雑なエリアの場合に使
用する
Geo Bounding Box Filter
• 地理検索オプションの中
で、最も高速に動作
• 正確さが求められないな
らこれを使うと○
地名を判別するために
• 形態素解析の強化
• mecab-ipadic-NEologd の導入
• 新語・流行語
• 全国駅名一覧
• 同義語管理
地名の判別 - 辞書の強化
{
"tokens" : [ {
"token" : "中",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"position" : 1
}, {
"...
地名の判別 - 辞書の強化
kuromoji(Default)
{
"tokens" : [ {
"token" : "奥",
"start_offset" : 0,
"end_offset" : 1,
"type" : "word",
"po...
結果
認識通りのエリアが探せる!
! 中目黒 デート
結果
駅周辺から距離順に探せる!
! 目黒駅 デート
結果
住所じゃなくても探せる!
! 奥渋谷 デート
まとめ
• 「どこで」を探すには全文検索では不十分
• 「地理検索」を組み合わせることで、

よりよい検索体験を作れる
• Elasticsearchは地理検索するにも便利!
ご静聴ありがとうございました
おまけ
「駅名」での検索の場合
• 駅周辺のスポットを検索
• 駅からの距離に応じてスコアを調整
• Elasticsearchでは
• Function Score Query を使う
• 詳しくは http://techlife.cookpad.c...
おでかけスポット検索のむずかしさ - Holidayを支える検索技術
Upcoming SlideShare
Loading in...5
×

おでかけスポット検索のむずかしさ - Holidayを支える検索技術

1,038
-1

Published on

2016.01.23
Cookpad TechConf 2016
http://techconf.cookpad.com/

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

No Downloads
Views
Total Views
1,038
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

おでかけスポット検索のむずかしさ - Holidayを支える検索技術

  1. 1. おでかけスポット検索 のむずかしさ - Holidayを支える検索技術 Cookpad TechConf 2016
  2. 2. 自己紹介 • 内藤 雄介(ないとうゆうすけ) • おでかけプラン作成・共有
 サービス「Holiday」の開発 • サーバサイドの開発を担当
  3. 3. いつもの休日のおでかけを 楽しくすることで 人生を豊かにする
  4. 4. Holidayでの検索
  5. 5. Holidayでの検索 ! フリーワード
  6. 6. Holidayでの検索 ! どこで だれとx 中目黒 デート
  7. 7. Holidayでの検索 どこで だれとx いつ ! 中目黒 冬
  8. 8. Holidayでの検索 どこで だれとx いつ なにを ! 中目黒 散歩
  9. 9. Holidayでの検索 ! どこで
  10. 10. これまでは... => 全文検索
  11. 11. 全文検索だけでは うまくいかなかった
  12. 12. 「中目黒、中目黒にない」問題
  13. 13. ユーザが考える「中目黒」 • 目黒川沿いのおしゃれなカフェ・雑貨点が
 集まっているエリア • 中目黒駅前の商店街エリア
  14. 14. ユーザが考える「中目黒」
  15. 15. 住所としての「中目黒」
  16. 16. 2つの「中目黒」の差
  17. 17. 「駅周辺を探せない」問題
  18. 18. 駅名で検索するということは • 「駅から『徒歩圏内』で『なるべく近く』
 で遊べるところないかな」と考えていそう • 住所文字列から距離は測れない => 結果順に反映できない
  19. 19. 課題 • スポット名・住所からの全文検索では... • 一般認識とは違ったエリアを探してしまう • 駅からの距離を結果に反映できない
  20. 20. 「全文検索」x「地理検索」
  21. 21. Elasticsearch
  22. 22. これまで 中目黒 カフェ! 中目黒 カフェ
  23. 23. 改善後 カフェ 中目黒 " { 位置情報 } ! 中目黒 カフェ AND or must
  24. 24. Elasticsearchでの地理検索 • Geo Distance Filter • Geo Polygon Filter • Geo Bounding Box Filter ※Elasticsearch2系ではQueryとして実装されてます
  25. 25. Geo Distance Filter • 中心点からの距離で絞り 込む • 駅周辺のスポットを探す などのケースに適してい る
  26. 26. Geo Polygon Filter • 多角形で範囲を指定する • 複雑なエリアの場合に使 用する
  27. 27. Geo Bounding Box Filter • 地理検索オプションの中 で、最も高速に動作 • 正確さが求められないな らこれを使うと○
  28. 28. 地名を判別するために • 形態素解析の強化 • mecab-ipadic-NEologd の導入 • 新語・流行語 • 全国駅名一覧 • 同義語管理
  29. 29. 地名の判別 - 辞書の強化 { "tokens" : [ { "token" : "中", "start_offset" : 0, "end_offset" : 1, "type" : "word", "position" : 1 }, { "token" : "中目黒", "start_offset" : 0, "end_offset" : 3, "type" : "word", "position" : 1 }, { "token" : "目黒", "start_offset" : 1, "end_offset" : 3, "type" : "word", "position" : 2 }, { "token" : "駅", "start_offset" : 3, "end_offset" : 4, "type" : "word", "position" : 3 } ] } { "tokens" : [ { "token" : "中", "start_offset" : 0, "end_offset" : 1, "type" : "word", "position" : 1 }, { "token" : "中目黒駅", "start_offset" : 0, "end_offset" : 4, "type" : "word", "position" : 1 }, { "token" : "目黒駅", "start_offset" : 1, "end_offset" : 4, "type" : "word", "position" : 2 } ] } with NEologd $ curl -XGET 'localhost:9200/index/_analyze' -d '中目黒駅' kuromoji(Default)
  30. 30. 地名の判別 - 辞書の強化 kuromoji(Default) { "tokens" : [ { "token" : "奥", "start_offset" : 0, "end_offset" : 1, "type" : "word", "position" : 1 }, { "token" : "渋谷", "start_offset" : 1, "end_offset" : 3, "type" : "word", "position" : 2 } ] } { "tokens" : [ { "token" : "奥", "start_offset" : 0, "end_offset" : 1, "type" : "word", "position" : 1 }, { "token" : "奥渋谷", "start_offset" : 0, "end_offset" : 3, "type" : "word", "position" : 1 }, { "token" : "渋谷", "start_offset" : 1, "end_offset" : 3, "type" : "word", "position" : 2 } ] } with NEologd $ curl -XGET 'localhost:9200/index/_analyze' -d '奥渋谷'
  31. 31. 結果 認識通りのエリアが探せる! ! 中目黒 デート
  32. 32. 結果 駅周辺から距離順に探せる! ! 目黒駅 デート
  33. 33. 結果 住所じゃなくても探せる! ! 奥渋谷 デート
  34. 34. まとめ • 「どこで」を探すには全文検索では不十分 • 「地理検索」を組み合わせることで、
 よりよい検索体験を作れる • Elasticsearchは地理検索するにも便利!
  35. 35. ご静聴ありがとうございました
  36. 36. おまけ
  37. 37. 「駅名」での検索の場合 • 駅周辺のスポットを検索 • 駅からの距離に応じてスコアを調整 • Elasticsearchでは • Function Score Query を使う • 詳しくは http://techlife.cookpad.com/ entry/2015/03/12/080000
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×