這是四部分系列中的第三部分,該系列演示了Solarium與Apache Solr進行搜索實施的集成。 第一部分涵蓋了核心概念和設置,而第二部分則詳細介紹了Solarium的安裝和配置作為SOLR的PHP接口。 本文著重於構建搜索功能本身。
>密鑰概念:
>本教程涵蓋了使用Solarium客戶端在Laravel構建基本搜索的基本搜索。 我們將使用DEMAX,實現式搜索來探索增強搜索,以搜索精製結果,管理動態字段和分頁,並實施過濾以改進用戶交互。
基本搜索實現:
可以實現一個簡單的搜索,如下所示:
<code class="language-php">$query = $client->createSelect(); $query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input</code>
>從laravel get或post variable(命名為'q')中檢索搜索查詢。 佔位符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>>通過結果迭代:
<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>
集成到laravel應用程序中:>
為了獲得get請求,家庭控制器中的方法可能是: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>)將顯示結果:
通過DIMAX增強搜索:app/views/home/index.blade.php
<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>>。
faceTed搜索:
$query->setStart(0);
$query->setRows(20);
>顯示面計數:
範圍的方面(例如,十年來):>
用刻面過濾:
<code class="language-php">$facetSet = $query->getFacetSet(); $facetSet->createFacetField('rating')->setField('rating');</code>
>基於刻面選擇的添加過濾:
<code class="language-php">$facet = $resultset->getFacetSet()->getFacet('rating'); foreach ($facet as $value => $count) { echo $value . ' [' . $count . ']<br>'; }</code>
應更新視圖以包括基於這些方面過濾的鏈接。 這需要使用
使用適當的查詢參數生成URL。 (省略了簡潔的詳細視圖代碼,但遵循原始文本中概述的原則)。<code class="language-php">$facet = $facetSet->createFacetRange('years') ->setField('year') ->setStart(1900) ->setGap(10) ->setEnd(2020);</code>>
這種增強的解釋提供了在Laravel應用程序中對日光浴室和Solr集成的更具結構化和詳細的演練。 請記住將代碼調整到您的特定數據模型和應用程序結構中。 >
以上是將Solarium與Solr一起搜索 - 實施的詳細內容。更多資訊請關注PHP中文網其他相關文章!