Address
:
[go:
up one dir
,
main page
]
Include Form
Remove Scripts
Accept Cookies
Show Images
Show Referer
Rotate13
Base64
Strip Meta
Strip Title
Session Cookies
More Web Proxy on the site http://driver.im/
Submit Search
おでかけスポット検索のむずかしさ - Holidayを支える検索技術
•
26 likes
•
39,076 views
Yusuke Naito
Follow
2016.01.23 Cookpad TechConf 2016 http://techconf.cookpad.com/
Read less
Read more
1 of 38
Download now
Downloaded 20 times
More Related Content
おでかけスポット検索のむずかしさ - Holidayを支える検索技術
1.
おでかけスポット検索 のむずかしさ - Holidayを支える検索技術 Cookpad TechConf
2016
2.
自己紹介 • 内藤 雄介(ないとうゆうすけ) •
おでかけプラン作成・共有 サービス「Holiday」の開発 • サーバサイドの開発を担当
4.
いつもの休日のおでかけを 楽しくすることで 人生を豊かにする
5.
Holidayでの検索
6.
Holidayでの検索 ! フリーワード
7.
Holidayでの検索 ! どこで だれとx 中目黒 デート
8.
Holidayでの検索 どこで だれとx いつ ! 中目黒
冬
9.
Holidayでの検索 どこで だれとx いつ なにを ! 中目黒
散歩
10.
Holidayでの検索 ! どこで
11.
これまでは... => 全文検索
12.
全文検索だけでは うまくいかなかった
13.
「中目黒、中目黒にない」問題
14.
ユーザが考える「中目黒」 • 目黒川沿いのおしゃれなカフェ・雑貨点が 集まっているエリア • 中目黒駅前の商店街エリア
15.
ユーザが考える「中目黒」
16.
住所としての「中目黒」
17.
2つの「中目黒」の差
18.
「駅周辺を探せない」問題
19.
駅名で検索するということは • 「駅から『徒歩圏内』で『なるべく近く』 で遊べるところないかな」と考えていそう • 住所文字列から距離は測れない =>
結果順に反映できない
20.
課題 • スポット名・住所からの全文検索では... • 一般認識とは違ったエリアを探してしまう •
駅からの距離を結果に反映できない
21.
「全文検索」x「地理検索」
22.
Elasticsearch
23.
これまで 中目黒 カフェ! 中目黒
カフェ
24.
改善後 カフェ 中目黒 " { 位置情報
} ! 中目黒 カフェ AND or must
25.
Elasticsearchでの地理検索 • Geo Distance
Filter • Geo Polygon Filter • Geo Bounding Box Filter ※Elasticsearch2系ではQueryとして実装されてます
26.
Geo Distance Filter •
中心点からの距離で絞り 込む • 駅周辺のスポットを探す などのケースに適してい る
27.
Geo Polygon Filter •
多角形で範囲を指定する • 複雑なエリアの場合に使 用する
28.
Geo Bounding Box
Filter • 地理検索オプションの中 で、最も高速に動作 • 正確さが求められないな らこれを使うと○
29.
地名を判別するために • 形態素解析の強化 • mecab-ipadic-NEologd
の導入 • 新語・流行語 • 全国駅名一覧 • 同義語管理
30.
地名の判別 - 辞書の強化 { "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)
31.
地名の判別 - 辞書の強化 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 '奥渋谷'
32.
結果 認識通りのエリアが探せる! ! 中目黒 デート
33.
結果 駅周辺から距離順に探せる! ! 目黒駅 デート
34.
結果 住所じゃなくても探せる! ! 奥渋谷 デート
35.
まとめ • 「どこで」を探すには全文検索では不十分 • 「地理検索」を組み合わせることで、 よりよい検索体験を作れる •
Elasticsearchは地理検索するにも便利!
36.
ご静聴ありがとうございました
37.
おまけ
38.
「駅名」での検索の場合 • 駅周辺のスポットを検索 • 駅からの距離に応じてスコアを調整 •
Elasticsearchでは • Function Score Query を使う • 詳しくは http://techlife.cookpad.com/ entry/2015/03/12/080000
Download