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

Menggunakan solarium dengan solr untuk carian - maju

William Shakespeare
Lepaskan: 2025-02-21 10:20:13
asal
446 orang telah melayarinya

Menggunakan solarium dengan solr untuk carian - maju

Ini adalah bahagian keempat dan terakhir siri menggunakan pelaksanaan carian SOLR Apache bersama -sama dengan Solarium, perpustakaan PHP untuk mengintegrasikannya ke dalam aplikasi anda seolah -olah ia berasal.

Dalam tiga bahagian pertama kami memasang dan mengkonfigurasi Solr dan Solarium dan mula membina aplikasi contoh untuk mencari filem. Kami juga melihat carian faceted.

We’re going to wrap up the series by looking at some more advanced features of SOLR, and how to use them with Solarium.

Takeaways Key

    Gunakan ciri penonjolan di SOLR dengan Solarium untuk meningkatkan penglihatan hasil carian dengan menandakan perkataan atau frasa yang dipadankan dalam dokumen, yang menawarkan pilihan penonjolan berasaskan penuh dan coretan.
  • Mengintegrasikan fungsi autocomplete ke dalam aplikasi carian anda menggunakan komponen Suggester Solr, yang menganalisis medan indeks untuk corak pemadanan untuk mencadangkan terma pertanyaan secara dinamik.
  • Menggunakan konfigurasi berasaskan array untuk menubuhkan pertanyaan dalam solarium, yang membolehkan penyesuaian terperinci parameter carian dan pengendalian hasil.
  • Kembangkan keupayaan SOLR dengan menambahkan teras tambahan, yang melibatkan membuat direktori dan fail konfigurasi tertentu untuk mengendalikan dataset yang berbeza atau kriteria carian dengan cekap.
  • Sesuaikan tingkah laku solr dengan fail konfigurasi tambahan seperti sinonims.txt dan stopwords.txt untuk menyempurnakan pemahaman dan pemprosesan enjin carian bahasa pertanyaan, meningkatkan kaitan dan ketepatan carian.
  • Highlighting Results with SOLR
The Highlighting component allows you to highlight the parts of a document which have matched your search. Tingkah lakunya di sekitar apa yang ditunjukkan bergantung pada medan - jika kemungkinan tajuknya akan menunjukkannya secara keseluruhannya dengan kata -kata yang dipadankan, dan bidang yang lebih lama - seperti sinopsis atau badan artikel - ia akan menyerlahkan words but using snippets; much like Google’s search results do.

To set up highlighting, you first need to specify the fields to include. Then, you can set a prefix and corresponding postfix for the highlighted words or phrases. So for example, to make highlighted words and phrases bold:

Alternatively, to add a background color:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Or you can even use per-field settings:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sebaik sahaja anda telah mengkonfigurasi komponen penonjolan dalam pelaksanaan carian anda, terdapat sedikit lagi kerja yang terlibat dalam memaparkannya dalam paparan hasil carian anda.

$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
First, you need to extract the highlighted document from the highlighting component by ID:

Now, you can access all the highlighted fields by iterating through them, as properties of the highlighted document:

$highlightedDoc = $highlighting->getResult($document->id);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Or, you can use getField():

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Medan yang diketengahkan tidak hanya mengembalikan teks, namun sebaliknya, mereka akan mengembalikan pelbagai "coretan" teks. Sekiranya tidak ada perlawanan untuk bidang tertentu - contohnya jika carian anda dipadankan pada tajuk tetapi bukan sinopsis - maka array itu akan kosong.

Kod di atas akan mengembalikan maksimum satu coretan. Untuk mengubah tingkah laku ini, anda boleh menggunakan kaedah setSnippets ():

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sebagai contoh, katakan anda mencari perkataan "bintang". Salah satu hasilnya mempunyai sinopsis yang berbunyi seperti berikut:

ini tidak boleh dilepaskan acara teater filem akan menampilkan salah satu momen yang paling mengasyikkan dalam sejarah TV dan klip eksklusif mengenai pembuatan yang terbaik dari kedua -dua dunia dan Star Trek: Musim Generasi Seterusnya 3. Ditetapkan pada abad ke -24, Generasi akan datang dicipta oleh Gene Roddenberry lebih 20 tahun selepas siri Star Trek yang asal. Generasi seterusnya menjadi siri terpanjang francais Star Trek, yang terdiri daripada 178 episod selama 7 musim. Star Trek: Generasi Seterusnya-yang terbaik dari kedua-dua dunia adalah peluang pertama untuk melihat yang terbaik dari kedua-dua dunia, salah satu episod TV terbesar sepanjang masa, sebagai ciri penuh panjang yang remastered di teater filem terpilih di seluruh negara.

Arahan Sinopsis Dokumen Siram akan mengandungi tiga item:

  • klip sejarah dan eksklusif mengenai pembuatan yang terbaik dari kedua -dua dunia dan Star Trek: Generasi Seterusnya
  • selepas siri Star Trek yang asal. Generasi akan datang menjadi siri terpanjang bintang
  • Francais Trek, yang terdiri daripada 178 episod lebih dari 7 musim. Star Trek: Generasi Seterusnya - Yang Terbaik

Satu cara untuk memaparkan pelbagai coretan adalah untuk meletupkannya, contohnya:

$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

ini menghasilkan perkara berikut:

Klip sejarah dan eksklusif mengenai pembuatan yang terbaik dari kedua -dua dunia dan Star Trek: Generasi Seterusnya ... selepas siri Star Trek yang asal. Generasi seterusnya menjadi siri terpanjang bintang ... Trek Francais, yang terdiri daripada 178 episod selama 7 musim. Star Trek: Generasi Seterusnya - Yang Terbaik

Terdapat beberapa parameter lain yang boleh anda gunakan untuk mengubah suai tingkah laku komponen penonjolan, yang dijelaskan di sini.

Mengintegrasikan penonjolan ke dalam carian filem kami

Sekarang kita telah meliputi cara menggunakan penonjolan, mengintegrasikannya ke dalam aplikasi carian filem kami harus mudah. ​​

Perkara pertama yang perlu dilakukan ialah mengubah suai aplikasi/pengawal/homecontroller.php dengan menambahkan yang berikut, sebelum kita menjalankan carian:

$highlightedDoc = $highlighting->getResult($document->id);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

maka hasil carian - yang akan anda ingat ada dalam apl/paparan/home/index.blade.php - menjadi:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bagaimana setiap hasil carian pada dasarnya menggabungkan dan memadankan medan antara dokumen hasil carian, dan dokumen yang diserlahkan - yang terakhir adalah subset dari bekas. Bergantung pada skema anda, anda mungkin mempunyai semua bidang anda yang terdapat dalam versi yang diserlahkan.

Suggester - Menambah AutoComplete

Komponen Suggester digunakan untuk mencadangkan terma pertanyaan berdasarkan input pertanyaan yang tidak lengkap. Pada dasarnya ia mengkaji indeks pada medan tertentu dan mengekstrak istilah carian yang sepadan dengan corak tertentu. Anda kemudian boleh memesan cadangan tersebut dengan kekerapan untuk meningkatkan kaitan carian.

Untuk menubuhkan suggester, kami perlu mengkonfigurasinya dalam fail solrconfig.xml anda. Buka ia letakkan coretan XML berikut di suatu tempat berhampiran pengisytiharan yang lain:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Anda akan melihat beberapa rujukan kepada "Spellcheck", tetapi ini semata -mata kerana komponen Suggester memusnahkan banyak fungsi secara dalaman.

Bit penting untuk diperhatikan ialah item , yang memberitahu komponen bahawa kami ingin menggunakan medan tajuk untuk mendasarkan cadangan kami.

mulakan semula solr, dan kini anda boleh cuba menjalankan pertanyaan cadangan melalui penyemak imbas web anda:

$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

(anda mungkin perlu mengubah nombor port, bergantung pada cara anda menyediakan solr)

output harus kelihatan sedikit seperti ini:

$highlightedDoc = $highlighting->getResult($document->id);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Seperti yang anda lihat, Solr telah mengembalikan empat perlawanan yang mungkin untuk "ho" - *ho ** use, ** ho ** menggunakan, ** ho ** rror dan ** ho ** saya. Walaupun *rumah dan seram sebelum rumah di abjad, rumah muncul pertama kerana menjadi salah satu istilah carian yang paling biasa dalam indeks kami .

mari kita gunakan komponen ini untuk membuat autocomplete untuk kotak carian kami, yang akan mencadangkan istilah carian biasa sebagai pengguna jenis pertanyaan mereka.

Pertama, tentukan laluan:

if($highlightedDoc){
    foreach($highlightedDoc as $field => $highlight) {
        echo implode(' (...) ', $highlight) . '<br/>';
    }
}
Salin selepas log masuk

termasuk jQuery ui (dan jQuery sendiri) dalam susun atur anda:

if($highlightedDoc){
    $highlightedTitle = $highlightedDoc->getField('title');
}
Salin selepas log masuk

Sertakan tema JQuery UI:

$hl = $query->getHighlighting();
$hl->setSnippets(5);
// . . . as before . . .
Salin selepas log masuk

Dan akhirnya, tambahkan beberapa Js untuk memulakan autocomplete:

implode(' ... ', $highlightedDoc->getField('synopsis'))
Salin selepas log masuk

itu semua ada - cubalah dengan menjalankan beberapa carian.

konfigurasi berasaskan array

Jika anda lebih suka, anda boleh menggunakan array untuk membuat pertanyaan anda - contohnya:

// Get highlighting component, and apply settings
$hl = $query->getHighlighting();
$hl->setSnippets(5);
$hl->setFields(array('title', 'synopsis'));

$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');

// Execute the query and return the result
$resultset = $this->client->select($query);
Salin selepas log masuk

Menambah teras tambahan

Pada permulaan, Solr melintasi direktori rumah yang ditentukan mencari teras, yang ia mengenal pasti apabila ia menempatkan fail yang dipanggil Core.Propeties. Setakat ini kami telah menggunakan teras yang dipanggil Collection1, dan anda akan melihat bahawa ia mengandungi tiga item utama:

fail core.propertes. Pada yang paling asas, ia hanya mengandungi nama contoh.

Direktori CONF mengandungi fail konfigurasi untuk contohnya. Sekurang -kurangnya, direktori ini mesti mengandungi skema.xml dan fail solrconfig.xml.

Direktori data memegang indeks. Lokasi direktori ini boleh ditindih, dan jika ia tidak wujud, ia akan dibuat untuk anda.

Jadi, untuk membuat contoh baru ikuti langkah -langkah ini:

  1. Buat direktori baru di direktori rumah anda - filem dalam aplikasi contoh
  2. Buat direktori conf di
  3. Buat atau salin fail skema.xml dan fail solrconfig.xml dalam direktori conf, dan menyesuaikan dengan sewajarnya
  4. Buat fail teks yang dipanggil Core.Properties dalam direktori rumah, dengan kandungan berikut:

name = instancename

... di mana Instancename adalah nama direktori baru anda.

Perhatikan bahawa konfigurasi skema.xml yang kapal dalam direktori contoh mengandungi rujukan kepada beberapa fail teks - contohnya stopwords.txt, protwords.txt dll - yang mungkin anda perlu menyalin juga.

kemudian mulakan semula Solr.

Anda juga boleh menambah teras baru melalui antara muka web pentadbiran di pelayar web anda - klik admin teras di sebelah kiri, kemudian tambah teras.

Konfigurasi tambahan

Terdapat beberapa fail konfigurasi tambahan yang patut disebutkan.

fail stopwords.txt-atau lebih khusus, fail khusus bahasa seperti lang/stopwords_en.txt-mengandungi kata-kata yang harus diabaikan oleh pengindeks carian, seperti "a", "" dan "at" . Dalam kebanyakan kes, anda mungkin tidak perlu mengubah suai fail ini.

Bergantung pada aplikasi anda, anda mungkin mendapati bahawa anda perlu menambah kata -kata ke protwords.txt. Fail ini mengandungi senarai perkataan yang dilindungi yang tidak "berpunca" - iaitu, dikurangkan kepada bentuk asas mereka; Sebagai contoh "ditanya" menjadi "bertanya", "bekerja" menjadi "kerja". Kadang -kadang memunculkan percubaan untuk "membetulkan" kata -kata, mungkin mengeluarkan apa yang difikirkannya adalah huruf yang salah nombor pada akhirnya. Anda mungkin berurusan dengan kawasan geografi dan mendapati bahawa "Maine" berpunca daripada "Maine".

anda boleh menentukan sinonim - kata -kata dengan makna yang sama - dalam sinonim.txt. Sinonim berasingan dengan koma secara per-line. Contohnya:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<strong>');
$hl->setSimplePostfix('</strong>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
anda juga boleh menggunakan synoyms.txt untuk membantu membetulkan kesilapan ejaan biasa menggunakan pemetaan sinonim, contohnya:

$hl = $query->getHighlighting();
$hl->setFields(array('title', 'synopsis'));
$hl->setSimplePrefix('<span style="background:yellow;">');
$hl->setSimplePostfix('</span>');
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika anda menggunakan medan mata wang, anda mungkin ingin mengemas kini dan mengawasi mata wang.xml, yang menentukan beberapa contoh kadar pertukaran - yang tentunya sangat tidak menentu.

Ringkasan

Dalam siri ini, kami telah melihat pelaksanaan Solr Apache untuk mencari, dan menggunakan perpustakaan PHP Solarium untuk berinteraksi dengannya. Kami telah memasang dan mengkonfigurasi SOLR bersama -sama dengan skema contoh, dan membina aplikasi yang direka untuk mencari satu set filem, yang menunjukkan beberapa ciri SOLR. Kami telah melihat carian faceted, menonjolkan hasil dan komponen dismax. Mudah -mudahan ini akan memberi anda cukup landasan untuk menyesuaikannya untuk menggunakan SOLR untuk mencari dalam aplikasi anda.

Untuk bacaan lanjut, anda mungkin ingin memuat turun Panduan Rujukan SOLR sebagai PDF, atau berunding dengan dokumentasi Solarium.

Soalan Lazim (Soalan Lazim) Mengenai Menggunakan Solarium Dengan Solr Untuk Carian Lanjutan

Bagaimana saya boleh melaksanakan autocomplete dengan solr dan solarium?

Melaksanakan autocomplete dengan solr dan solarium melibatkan penciptaan dalam fail konfigurasi solr anda. Suggester ini akan digunakan untuk memberikan cadangan untuk pertanyaan pengguna. Sebaik sahaja suggester ditubuhkan, anda boleh menggunakan pertanyaan Solarium untuk mendapatkan cadangan. Pertanyaan Suggester akan mengembalikan senarai cadangan berdasarkan input pengguna, yang kemudiannya boleh dipaparkan kepada pengguna. perisian yang berbeza. Solarium adalah perpustakaan PHP yang menyediakan API untuk berinteraksi dengan SOLR, platform carian yang kuat. Sebaliknya, Stellarium adalah planetarium sumber terbuka percuma untuk komputer anda. Ia menunjukkan langit yang realistik dalam 3D, seperti apa yang anda lihat dengan mata kasar, teropong atau teleskop. , anda perlu membuat contoh klien dengan konfigurasi pelayan SOLR anda. Kemudian, anda boleh membuat pertanyaan pilih menggunakan fungsi CreateSelect klien. Anda boleh menetapkan pelbagai parameter pada pertanyaan, seperti medan untuk kembali, rentetan pertanyaan, dan mana -mana penapis. Sebaik sahaja pertanyaan disediakan, anda boleh melaksanakannya dengan menggunakan fungsi pelaksanaan klien, yang akan mengembalikan set hasil yang anda boleh berulang untuk mengakses dokumen individu.

Untuk menambah dokumen ke Solr menggunakan Solarium, anda perlu membuat contoh klien dengan konfigurasi pelayan SOLR anda. Kemudian, anda boleh membuat pertanyaan kemas kini menggunakan fungsi createUpdate klien. Anda boleh menambah dokumen untuk pertanyaan ini menggunakan fungsi AddDocument, yang mengambil contoh dokumen sebagai hujahnya. Contoh dokumen harus mempunyai semua bidang dan nilai yang ingin anda tambahkan ke dokumen. Sebaik sahaja semua dokumen ditambahkan pada pertanyaan, anda boleh melaksanakannya menggunakan fungsi pelaksanaan klien.

Bagaimana saya boleh memadam dokumen dari solr menggunakan solarium? Pertama perlu membuat contoh klien dengan konfigurasi pelayan SOLR anda. Kemudian, anda boleh membuat pertanyaan kemas kini menggunakan fungsi createUpdate klien. Anda boleh menambah arahan padam ke pertanyaan ini menggunakan fungsi adddeletebyid atau adddeleteByQuery. Sebaik sahaja semua arahan padam ditambah ke pertanyaan, anda boleh melaksanakannya menggunakan fungsi pelaksanaan klien.

Bagaimana saya boleh mengoptimumkan indeks solr saya menggunakan solarium?

Untuk mengoptimumkan indeks solr anda menggunakan solarium, anda perlu membuat contoh klien dengan konfigurasi pelayan Solr anda. Kemudian, anda boleh membuat pertanyaan kemas kini menggunakan fungsi createUpdate klien. Anda boleh menambah arahan mengoptimumkan ke pertanyaan ini menggunakan fungsi ADDOptimize. Sebaik sahaja arahan Optimal ditambahkan pada pertanyaan, anda boleh melaksanakannya menggunakan fungsi pelaksanaan klien.

Bagaimana saya boleh mengendalikan kesilapan apabila menggunakan solarium dengan solr? boleh dikendalikan dengan menangkap solarium_exception yang dibuang oleh fungsi pelaksanaan pelanggan. Pengecualian ini akan mengandungi maklumat mengenai ralat, seperti mesej ralat dan respons solr.

Bagaimana saya boleh menggunakan aspek dengan solarium dan solr? Pertama perlu membuat pertanyaan pilih menggunakan fungsi CreateSelect klien. Kemudian, anda boleh menambah set aspek ke pertanyaan menggunakan fungsi addFacetet. Anda boleh menambah pelbagai jenis aspek ke set aspek, seperti aspek medan, aspek pertanyaan, dan aspek pelbagai. Sebaik sahaja aspek disediakan, anda boleh melaksanakan pertanyaan menggunakan fungsi pelaksanaan klien, yang akan mengembalikan set hasil yang termasuk hasil aspek. 🎜> Untuk menggunakan penonjolan dengan Solarium dan Solr, anda perlu membuat pertanyaan pilih menggunakan fungsi CreateSelect klien. Kemudian, anda boleh menambah penyerlah pada pertanyaan menggunakan fungsi lampu tambahan. Anda boleh menetapkan pelbagai parameter pada penyerlah, seperti bidang untuk menyerlahkan dan bilangan coretan untuk kembali. Sebaik sahaja penyerlah disediakan, anda boleh melaksanakan pertanyaan menggunakan fungsi pelaksanaan klien, yang akan mengembalikan set hasil yang termasuk hasil penonjolan. 🎜> Untuk menggunakan penomboran dengan solarium dan solr, anda perlu membuat pertanyaan pilih dengan menggunakan fungsi createSelect klien. Kemudian, anda boleh menetapkan parameter permulaan dan baris pada pertanyaan untuk menentukan julat hasil untuk kembali. Parameter Mula menentukan indeks hasil pertama untuk kembali, dan parameter baris menentukan bilangan keputusan untuk kembali. Sebaik sahaja penomboran disediakan, anda boleh melaksanakan pertanyaan menggunakan fungsi pelaksanaan klien, yang akan mengembalikan set hasil yang merangkumi pelbagai hasil yang ditentukan.

Atas ialah kandungan terperinci Menggunakan solarium dengan solr untuk carian - maju. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan