PHP用Elasticsearchクライント、Elasticaを使ってみる (1)
の続きで、作成したインデックスを検索してみる。
全件取得
<?php
$client = new Client();
$index = $client->getIndex('natalie_data');
$type = $index->getType('comic_news');
$query = Query::create(new MatchAll());
ソート条件指定
<?php
$query->setSort(array('updated' => 'asc'));
offset、取得件数指定
<?php
$query->setFrom(0);
$query->setSize(15);
件数取得
<?php
$resultSet = $type->search($query);
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数
echo 'Results: ' . count($resultSet) . "\n";//取得件数
検索結果取得
<?php
foreach ($resultSet as $res) {
$d = $res->getData();//結果を配列形式で取得
}
キーワード検索、結果取得
<?php
$qs = new QueryString();
$qs->setQuery('荒木飛呂彦 江口寿史');
$qs->setDefaultField('summary');
//$qs->setDefaultOperator('AND');
$query = Query::create($qs);
//マッチ箇所のハイライト設定
$query->setHighlight(array(
'fields' => array(
'summary' => array(
'fragment_size' => 200,
'number_of_fragments' => 1,
),
),
));
$resultSet = $type->search($query);
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数
echo 'Results: ' . count($resultSet) . "\n";//取得件数
foreach ($resultSet as $res) {
$d = $res->getData();
$hl = $res->getHighlights();//ハイライト部分の取得
var_dump($d);
var_dump($hl);
}
複数条件の設定
<?php
// 8/27-8/28の記事で "マンガ" にマッチする記事
$b = new Bool();
$term = new Term();
$term->setTerm('summary', 'マンガ');
$b->addMust($term);
$range = new Range();
$range->addField('updated', array('from' => '2013-08-27', 'to' => '2013-08-28'));
$b->addMust($range);
$query = Query::create($b);
$resultSet = $type->search($query);
類似文(関連記事)検索
<?php
$likeText = '『進撃の巨人』(しんげきのきょじん、Attack on Titan)は、諫山創による日本の漫画作品。小説・テレビアニメなどのメディアミックス展開が行われている。';
$mlt = new MoreLikeThis();
$mlt->setLikeText($likeText);
$mlt->setFields(array('title','summary'));
$mlt->setMaxQueryTerms(1);
$mlt->setMinDocFrequency(1);
$mlt->setMinTermFrequency(1);
$query = Query::create($mlt);
$resultSet = $type->search($query);