LoginSignup
11
13

More than 5 years have passed since last update.

PHP用Elasticsearchクライント、Elasticaを使ってみる (2)

Last updated at Posted at 2013-09-10

PHP用Elasticsearchクライント、Elasticaを使ってみる (1)
の続きで、作成したインデックスを検索してみる。

gist

全件取得

<?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);

参考

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13