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

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

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-21 10:56:10467ブラウズ

Using Solarium with SOLR for Search - Implementation

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

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

基本的な検索実装:

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

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

は、検索フレーズを逃がします。
<code class="language-php">$query = $client->createSelect();
$query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input</code>

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

結果の数を取得します:

<code class="language-php">$resultset = $client->select($query);</code>
結果を繰り返します:

<code class="language-php">printf('Your search yielded %d results:', $resultset->getNumFound());</code>

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

<code class="language-php">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>';
    }
}</code>

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

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

getIndex

<code class="language-php">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');
}</code>
dismaxで検索を強化:

app/views/home/index.blade.php

複数のフィールドで検索する(例:「タイトル」、「キャスト」、「概要」)、Dismaxを使用してください:
<code class="language-blade">@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</code>

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

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

<code class="language-php">$dismax = $query->getDisMax();
$dismax->setQueryFields('title^3 cast^2 synopsis^1'); // Assign weights</code>

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

並べ替え結果:

並べ替えを使用して並べ替えます。
<code class="language-php">$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all</code>

ページネーション:

<code class="language-php">$query->addSort('title', 'asc'); // Ascending order by title</code>
および

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

ファセット検索:

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

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

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

<code class="language-php">$facetSet = $query->getFacetSet();
$facetSet->createFacetField('rating')->setField('rating');</code>
ファセットでのフィルタリング

$facet = $resultset->getFacetSet()->getFacet('rating'); foreach ($facet as $value => $count) { echo $value . ' [' . $count . ']<br>'; }

ファセットの選択に基づいてフィルタリングを追加:
<code class="language-php">$facet = $facetSet->createFacetRange('years')
    ->setField('year')
    ->setStart(1900)
    ->setGap(10)
    ->setEnd(2020);</code>

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

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。