Last active
December 22, 2015 17:59
-
-
Save ise/6509874 to your computer and use it in GitHub Desktop.
Elasticaを使って検索するサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require_once '../vendor/autoload.php'; | |
use Elastica\Client; | |
use Elastica\Bulk; | |
use Elastica\Query; | |
use Elastica\Query\MatchAll; | |
use Elastica\Query\Term; | |
use Elastica\Query\QueryString; | |
use Elastica\Query\Bool; | |
use Elastica\Query\Range; | |
use Elastica\Query\MoreLikeThis; | |
$client = new Client(); | |
$index = $client->getIndex('natalie_data'); | |
$type = $index->getType('comic_news'); | |
echo '/* 全件取得 */' . "\n"; | |
$query = Query::create(new MatchAll()); | |
//ソート条件を指定 | |
$query->setSort(array('updated' => 'asc')); | |
//offset、取得件数を指定 | |
$query->setFrom(0); | |
$query->setSize(15); | |
$resultSet = $type->search($query); | |
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数 | |
echo 'Results: ' . count($resultSet) . "\n";//取得件数 | |
foreach ($resultSet as $res) { | |
$d = $res->getData();//結果を配列形式で取得 | |
//var_dump($d); | |
} | |
echo '/* 完全一致検索 */' . "\n"; | |
// index => not_analyzed を指定したfieldに対してTermで検索する | |
$term = new Term(); | |
$term->setTerm('link', 'http://natalie.mu/comic/news/98105'); | |
$query = Query::create($term); | |
$resultSet = $type->search($query); | |
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数 | |
echo 'Results: ' . count($resultSet) . "\n";//取得件数 | |
foreach ($resultSet as $res) { | |
$d = $res->getData(); | |
//var_dump($d); | |
} | |
echo '/* OR検索 */' . "\n"; | |
$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); | |
} | |
echo '/* 複数条件での検索 */' . "\n"; | |
// 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); | |
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数 | |
echo 'Results: ' . count($resultSet) . "\n";//取得件数 | |
foreach ($resultSet as $res) { | |
$d = $res->getData(); | |
//var_dump($d); | |
} | |
echo '/* 類似文(関連記事)検索 */' . "\n"; | |
$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); | |
echo 'Total: ' . $resultSet->getTotalHits() . "\n";//総件数 | |
echo 'Results: ' . count($resultSet) . "\n";//取得件数 | |
foreach ($resultSet as $res) { | |
$d = $res->getData(); | |
var_dump($d); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment