これは、検索実装のために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'); }
app/views/home/index.blade.php
@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 サイトの他の関連記事を参照してください。