Apache Solr
オープンソース全文検索エンジンサーバ
http://lucene.apache.org/solr/
Solarium PHP Solr client library
https://github.com/solariumphp/solarium
Solrはどこかにセットアップされていることを前提とします。
各バージョンは以下の通りとなります。
PHP 7.2、laravel 5.7、solr 7.6、Solarium 4
セットアップ
PHP用のSolrアクセス用のライブラリである、Solariumをセットアップします。
$ composer require solarium/solarium
設定ファイルを書きます。ローカルに「test」という名前のコアをつくりました。
config/solarium.php
<?php
return [
'endpoint' => [
'localhost' => [
'host' => env('SOLARIUM_HOST', '127.0.0.1'),
'port' => env('SOLARIUM_PORT', 8983),
'path' => env('SOLARIUM_PATH', '/solr'),
'core' => env('SOLARIUM_CORE', 'test'),
]
]
];
レコードを追加
コアにデータを登録します。書籍データです。
// Solrクライアント取得
$client = new Solarium\Client(config('solarium'));
// 更新オブジェクトを生成
$update = $client->createUpdate();
// まとめて登録
foreach ($books as $book) {
$doc = $update->createDocument();
$doc->source = $book->source;
$doc->sid = $book->isbn;
$doc->country = $book->getIsbnCountry();
$doc->title = $book->title;
$doc->author = $book->author;
$doc->pubdate = $book->pubdate;
$update->addDocument($doc);
}
// Solrへ更新をコミット
$update->addCommit();
$result = $client->update($update);
if ($result->getStatus() != 0) {
Log::error('Solr update failed.');
}
レコードを検索
登録した書籍データを検索します。
固定フィルターや、オフセットと取得数、ソートの設定が可能です。
ただし、ソートをすると検索スコアに関係なくソートされてしまうので注意が必要です。
// Solrクライアント取得
$client = new Solarium\Client(config('solarium'));
// 検索オブジェクトを生成
$query = $client->createSelect();
// フィルターを設定
$query->createFilterQuery('source')->setQuery('source:openbd');
// 検索クエリ
$query->setQuery('title:よつばと! AND author:"あずま きよひこ"');
// オフセットと取得数を設定
$query->setStart($offset)->setRows($limit);
// ソートを設定
$query->addSort('pubdate', $query::SORT_DESC);
// 検索を実行
$result = $client->select($query);
// 検索結果
// 結果.総件数 : $results->getNumFound();
foreach ($results as $doc) {
// 結果.各アイテム : $doc->isbn
}
簡単ですが以上です。