Rumah >pembangunan bahagian belakang >tutorial php >Menggunakan solarium dengan solr untuk carian - pelaksanaan
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%
<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:
<code class="language-php">$query->addSort('title', 'asc'); // Ascending order by title</code>Pagination:
Melaksanakan penomboran menggunakan
dan. $query->setStart(0);
$query->setRows(20);
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!