Edited at

Laravelから使うApache Solr

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
}

簡単ですが以上です。