はじめに
今回やりたかったのは、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も使わず、とりあえず動きを確認できるということでこんな感じでした
以上です