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件)
