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
mengambil semula pertanyaan carian dari laravel mendapatkan atau pembolehubah pos (bernama 'q'). Pemegang tempat Input::get('q')
melarikan diri dari frasa carian. %P1%
$resultset = $client->select($query);
printf('Your search yielded %d results:', $resultset->getNumFound());
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>'; } }
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'); }
) 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
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
Menentukan medan yang dikembalikan:
Kawalan Bidang mana yang dikembalikan menggunakan:
$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all
Menyusun hasil:
$query->addSort('title', 'asc'); // Ascending order by title
Melaksanakan penomboran menggunakan
dan. $query->setStart(0);
$query->setRows(20);
Facets membolehkan pengguna menapis hasil. Untuk membuat aspek di medan 'Rating':
Paparan Facet Counts:
$facetSet = $query->getFacetSet(); $facetSet->createFacetField('rating')->setField('rating');
Range Facet (mis., Menjelang dekad):
$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);
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)); }
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!