【aws】ElasticSearchでMore Like This検索をを使ってみたのでメモ
はじめに
今回やりたかったのは、dbに文章が登録されていて
あるレコードと類似した内容のデータを取得するということ
で、awsのelastic searchというサービスがまさにやりたいことがあったので試してみた。
awsコンソールでの作業はわかりずらい箇所はなかったので省略
indexとtypeの作成(dbのテーブル作成と同じ)
$url = "search-xxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com"; $index_name = "test-index"; $type_name = "test"; // index作成 $cmd = "curl -XPUT {$url}/{$index_name}" exec($cmd); // type作成 $json = json_encode(array( $type_name => array( "properties" => array( "id" => array("type" => "integer"), "content" => array("type" => "string", "term_vectors" => "yes"), // ★この項目で類似検索する(term_vectorsをつけること) ), ), )); $cmd = "curl -XPUT {$url}/{$index_name}/{$type_name}/_mapping -d '{$json}'"; exec($cmd);
テストデータ登録
以下はid = 123のレコードを1件登録
$id = "123"; $json = json_encode(array( "id" => $id, "content" => "テストです", )); $cmd = "curl -XPUT {$url}/{$index_name}/{$type_name}/{$id} -d '{$json}'"; exec($cmd);
検索
$json = json_encode(array( "query" => array( "match" => array("content" => "検索キーワード"), ), )); $cmd = "curl -XGET {$url}/{$index_name}/{$type_name}/_search -d '{$json}'"; $result = exec($cmd, $result);
More Like This検索
id = 1、2、3と類似するデータを取得するときは以下
$json = json_encode(array( "from" => 0, // 0〜100件取得 "size" => 100, "query" => array( "more_like_this" => array( "fields" => array("content"), "ids" => array("1","2","3"), ), ), )); $cmd = "curl -XGET {$url}/{$index_name}/{$type_name}/_search -d '{$json}'"; $result = exec($cmd);
sdkも使わず、とりあえず動きを確認できるということでこんな感じでした
以上です