Elasticsearchの日本語の形態素解析は基本的にkuromojiを使うのですが、けっこうよく出来てて「え?これまで拾っちゃう?」って思うこともしばしば。
かすってそうなデータも拾ってくれるのはありがたいのですが、さすがにノイズだらけって場合もあるので、スコアでフィルタリングしたいと思います。
ついでにPHPでの検索の投げ方も。
$url = 'http://elasticsearch:9200/indexname/photo/_search'; $data = '{"min_score": 0, "size": 10, "from": 1, "query": {"match":{"caption" : "キーワード"}}}\''; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS ,$data); $result = curl_exec( $ch ); curl_close();
min_scoreでスコアが0より大きいものを取得するようにしています。
0以上(score >= 0) じゃないから! score > 0 だから!
スコアが高ければ高いほど、キーワードとマッチしてるとみなされるので、ノイズが載らなくなります。
ちなみに、sizeで取得件数、fromはページ数です(上記の場合1ページ目から10件)