使用 Laravel 来调用 Apache Solr

Apache Solr是一个开源的全文搜索引擎服务器。你可以在http://lucene.apache.org/solr/上了解更多信息。

Solarium PHP Solr客户端库
https://github.com/solariumphp/solarium

前提是Solr已在某处设置好。

每个版本如下所示:PHP 7.2、laravel 5.7、solr 7.6、Solarium 4

安装

我们将设置Solr访问库Solarium,用于PHP语言。

$ composer require solarium/solarium

我将编写设置文件。我在本地创建了一个名为“test”的核心。

<?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
    }

很简单,但就只有这样了。

广告
将在 10 秒后关闭
bannerAds