首頁 >後端開發 >php教程 >將Solarium與Solr一起搜索 - 實施

將Solarium與Solr一起搜索 - 實施

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2025-02-21 10:56:10463瀏覽

Using Solarium with SOLR for Search - Implementation

這是四部分系列中的第三部分,該系列演示了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

>跨多個字段搜索(例如,'title','cast','supopsis'),使用DEMAX:
<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搜索:

facets允許用戶過濾結果。 要在“評分”字段上創建一個方面:

$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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn