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

Menggunakan solarium dengan solr untuk carian - pelaksanaan

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-21 10:56:10
asal
461 orang telah melayarinya

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:

$query = $client->createSelect();
$query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input
Salin selepas log masuk

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:

$resultset = $client->select($query);
Salin selepas log masuk
Ambil bilangan hasil:

printf('Your search yielded %d results:', $resultset->getNumFound());
Salin selepas log masuk
Melangkah melalui hasil:

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>';
    }
}
Salin selepas log masuk

Mengintegrasikan ke dalam aplikasi Laravel:

untuk permintaan mendapatkan, kaedah

di pengawal rumah boleh: 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');
}
Salin selepas log masuk
Pandangan yang sepadan (

) akan memaparkan hasil: 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
Salin selepas log masuk

Meningkatkan carian dengan dismax:

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

$dismax = $query->getDisMax();
$dismax->setQueryFields('title^3 cast^2 synopsis^1'); // Assign weights
Salin selepas log masuk
Ini mengutamakan perlawanan dalam bidang 'Tajuk'.

Menentukan medan yang dikembalikan:

Kawalan Bidang mana yang dikembalikan menggunakan:

$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all
Salin selepas log masuk

Menyusun hasil: Sort Hasil Menggunakan:

$query->addSort('title', 'asc'); // Ascending order by title
Salin selepas log masuk
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:
$facetSet = $query->getFacetSet();
$facetSet->createFacetField('rating')->setField('rating');
Salin selepas log masuk

Range Facet (mis., Menjelang dekad):
$facet = $resultset->getFacetSet()->getFacet('rating');
foreach ($facet as $value => $count) {
    echo $value . ' [' . $count . ']<br>';
}
Salin selepas log masuk

$facet = $facetSet->createFacetRange('years')
    ->setField('year')
    ->setStart(1900)
    ->setGap(10)
    ->setEnd(2020);
Salin selepas log masuk
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
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));
}
Salin selepas log masuk
. (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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan