Elasticserchの検索で余計なノイズを載せないようにしたい

2014-01-09

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