ホームページ > バックエンド開発 > PHPチュートリアル > SOLRでSolariumを使用して検索 - 実装

SOLRでSolariumを使用して検索 - 実装

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-21 10:56:10
オリジナル
461 人が閲覧しました

Using Solarium with SOLR for Search - Implementation

これは、検索実装のためにApache SolrとのSolariumの統合を示す4部構成のシリーズの3番目の記事です。 最初の部分では、コアの概念とセットアップをカバーしましたが、2番目の詳細なSolariumのインストールと構成はSolRへのPHPインターフェースとしての設定と構成をカバーしました。 この記事では、検索機能自体の構築に焦点を当てています

重要な概念: このチュートリアルは、Solariumクライアントを使用してLaravelで基本的な検索を構築することをカバーしています。 Dismaxを使用して強化された検索を検討し、洗練された結果のファセット検索を実装し、動的フィールドとページネーションを管理し、ユーザーインタラクションを改善するためのフィルタリングを実装します。

基本的な検索実装:

簡単な検索を次のように実装できます

laravel getまたはpost変数( 'q')から検索クエリを取得します。 プレースホルダー

は、検索フレーズを逃がします。
$query = $client->createSelect();
$query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input
ログイン後にコピー

検索の実行:Input::get('q') %P1%

結果の数を取得します:

$resultset = $client->select($query);
ログイン後にコピー
結果を繰り返します:

printf('Your search yielded %d results:', $resultset->getNumFound());
ログイン後にコピー

laravelアプリケーションへの統合:

foreach ($resultset as $document) {
    // Access fields as public properties (e.g., $document->title) or iterate:
    foreach ($document as $field => $value) {
        if (is_array($value)) $value = implode(', ', $value); // Handle multi-value fields
        print '<strong>' . $field . '</strong>: ' . $value . '<br>';
    }
}
ログイン後にコピー

Get Requestの場合、ホームコントローラーのメソッドは次のとおりです。 対応するビュー(

)に結果が表示されます:

getIndex

public function getIndex()
{
    if (Input::has('q')) {
        $query = $this->client->createSelect();
        $query->setQuery('%P1%', [Input::get('q')]);
        $resultset = $this->client->select($query);
        return View::make('home.index', ['q' => Input::get('q'), 'resultset' => $resultset]);
    }
    return View::make('home.index');
}
ログイン後にコピー
dismaxで検索を強化:

app/views/home/index.blade.php

複数のフィールドで検索する(例:「タイトル」、「キャスト」、「概要」)、Dismaxを使用してください:
@if (isset($resultset))
<p>Your search yielded <strong>{{ $resultset->getNumFound() }}</strong> results:</p>
@foreach ($resultset as $document)
    <h3>{{ $document->title }}</h3>
    <dl>
        <dt>Year</dt><dd>{{ $document->year }}</dd>
        @if (is_array($document->cast))
            <dt>Cast</dt><dd>{{ implode(', ', $document->cast) }}</dd>
        @endif
    </dl>
    {{ $document->synopsis }}
@endforeach
@endif
ログイン後にコピー

これは、「タイトル」フィールドのマッチに優先順位を付けます。

返されたフィールドの指定:

$dismax = $query->getDisMax();
$dismax->setQueryFields('title^3 cast^2 synopsis^1'); // Assign weights
ログイン後にコピー

どのフィールドが返されるかを制御してください:

並べ替え結果:

並べ替えを使用して並べ替えます。
$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all
ログイン後にコピー

ページネーション:

$query->addSort('title', 'asc'); // Ascending order by title
ログイン後にコピー
および

を使用してページネーションを実装します

ファセット検索:

$query->setStart(0); $query->setRows(20);ファセットにより、ユーザーは結果をフィルタリングできます。 「評価」フィールドにファセットを作成するには:

ファセットカウントを表示:

範囲のファセット(例:10年まで):

$facetSet = $query->getFacetSet();
$facetSet->createFacetField('rating')->setField('rating');
ログイン後にコピー
ファセットでのフィルタリング

<
$facet = $resultset->getFacetSet()->getFacet('rating');
foreach ($facet as $value => $count) {
    echo $value . ' [' . $count . ']<br>';
}
ログイン後にコピー

ファセットの選択に基づいてフィルタリングを追加:
$facet = $facetSet->createFacetRange('years')
    ->setField('year')
    ->setStart(1900)
    ->setGap(10)
    ->setEnd(2020);
ログイン後にコピー

ビューを更新して、これらのファセットに基づいてフィルタリング用のリンクを含める必要があります。 これには、を使用して適切なクエリパラメーターを使用してURLを生成する必要があります。 (Brevityのために省略された詳細なビューコードですが、元のテキストで概説されている原則に従います)。

この強化された説明は、Laravelアプリケーション内のソラリウムとSOLR統合のより構造的で詳細なウォークスルーを提供します。 コードを特定のデータモデルとアプリケーション構造に適応させることを忘れないでください。

以上がSOLRでSolariumを使用して検索 - 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート