Rumah >pembangunan bahagian belakang >tutorial php >Menggunakan solarium dengan solr untuk carian - pelaksanaan

Menggunakan solarium dengan solr untuk carian - pelaksanaan

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2025-02-21 10:56:10463semak imbas

Using Solarium with SOLR for Search - Implementation

Ini adalah ansuran ketiga dalam siri empat bahagian yang menunjukkan integrasi Solarium dengan Apache Solr untuk pelaksanaan carian. Bahagian pertama meliputi konsep dan persediaan teras, sementara pemasangan dan konfigurasi Solarium terperinci kedua sebagai antara muka PHP ke SOLR. Artikel ini memberi tumpuan kepada membina fungsi carian itu sendiri.

Konsep Utama:

Tutorial ini meliputi membina carian asas di Laravel menggunakan klien Solarium. Kami akan meneroka carian yang dipertingkatkan dengan menggunakan dismax, melaksanakan carian yang diperolehi untuk hasil yang halus, menguruskan bidang dinamik dan penomboran, dan melaksanakan penapisan untuk interaksi pengguna yang lebih baik.

Pelaksanaan Carian Asas:

Carian mudah boleh dilaksanakan seperti berikut:

<code class="language-php">$query = $client->createSelect();
$query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input</code>

mengambil semula pertanyaan carian dari laravel mendapatkan atau pembolehubah pos (bernama 'q'). Pemegang tempat Input::get('q') melarikan diri dari frasa carian. %P1%

Melaksanakan carian:

<code class="language-php">$resultset = $client->select($query);</code>
Ambil bilangan hasil:

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

<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>

Mengintegrasikan ke dalam aplikasi Laravel:

untuk permintaan mendapatkan, kaedah

di pengawal rumah boleh: 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>
Pandangan yang sepadan (

) akan memaparkan hasil: 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>

Meningkatkan carian dengan dismax:

untuk mencari di pelbagai bidang (mis., 'Tajuk', 'Cast', 'Sinopsis'), Gunakan Dismax:

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

Menentukan medan yang dikembalikan:

Kawalan Bidang mana yang dikembalikan menggunakan:

<code class="language-php">$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all</code>

Menyusun hasil: Sort Hasil Menggunakan:

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

Melaksanakan penomboran menggunakan

dan

. $query->setStart(0); $query->setRows(20);

carian faceted:

Facets membolehkan pengguna menapis hasil. Untuk membuat aspek di medan 'Rating':

Paparan Facet Counts:
<code class="language-php">$facetSet = $query->getFacetSet();
$facetSet->createFacetField('rating')->setField('rating');</code>

Range Facet (mis., Menjelang dekad):
<code class="language-php">$facet = $resultset->getFacetSet()->getFacet('rating');
foreach ($facet as $value => $count) {
    echo $value . ' [' . $count . ']<br>';
}</code>

<code class="language-php">$facet = $facetSet->createFacetRange('years')
    ->setField('year')
    ->setStart(1900)
    ->setGap(10)
    ->setEnd(2020);</code>
Penapisan dengan aspek:

tambah penapisan berdasarkan pilihan aspek:

Paparan harus dikemas kini untuk memasukkan pautan untuk penapisan berdasarkan aspek ini. Ini memerlukan menjana URL dengan parameter pertanyaan yang sesuai menggunakan
<code class="language-php">if (Input::has('rating')) {
    $query->createFilterQuery('rating')->setQuery('rating:%T1%', [Input::get('rating')]);
}
if (Input::has('decade')) {
    $query->createFilterQuery('years')->setQuery($helper->rangeQuery('year', Input::get('decade'), Input::get('decade') + 9));
}</code>
. (Kod pandangan terperinci yang ditinggalkan untuk keringkasan tetapi mengikuti prinsip -prinsip yang digariskan dalam teks asal).

http_build_query Penjelasan yang dipertingkatkan ini memberikan langkah solarium dan solr yang lebih berstruktur dan terperinci dalam aplikasi Laravel. Ingatlah untuk menyesuaikan kod ke model data dan struktur aplikasi khusus anda.

Atas ialah kandungan terperinci Menggunakan solarium dengan solr untuk carian - pelaksanaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn