Persyaratan: Pencarian teks lengkap di situs adalah fungsi yang umum digunakan, dan biasanya digunakan berdasarkan ituPencarian Elastis、SolrPenerapan dan pengembangan, dan sekarang dua yang baru telah dirilisRedisSearch、MeiliSearchMesin pencari, dua yang pertama lebih berat, meskipun dua yang terakhir tidak seberat dua yang pertama, tetapi masih perlu menerapkan layanan dependen, artikel ini menggunakan Lucene.Net + Jieba.NET untuk membangun pencarian di tempat yang ringan.
Lucene.Net
Lucene.Net adalah port .NET dari Lucene dan merupakan kit pengembangan mesin pencari teks lengkap sumber terbuka, yaitu bukan mesin pencari teks lengkap lengkap, tetapi arsitektur mesin pencari teks lengkap yang menyediakan mesin kueri lengkap dan mesin pengindeksan.
Situs:Login hyperlink terlihat. Alamat GitHub:Login hyperlink terlihat.
Jieba.NET
Jieba.NET adalah jieba Cina participle. Versi .NET (implementasi C#). Ini dapat melakukan fungsi seperti segmentasi kata, anotasi bagian dari ucapan, ekstraksi kata kunci, dll. untuk teks Cina, dan mendukung kamus khusus.
Alamat GitHub:Login hyperlink terlihat.
Pertama, mari kita lihat renderingnya:
Sesuaikan Analyzer
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream di Lucene TokenStream: Aliran yang diperoleh setelah tokenizer diproses. Aliran ini menyimpan berbagai informasi tentang segmentasi kata, yang dapat diperoleh secara efektif melalui TokenStream. Berikut ini adalah proses konversi aliran file menjadi TokenStream Pertama, gunakan Tokenizer untuk mengelompokkan kata-kata, tokenizer yang berbeda memiliki tokenzier yang berbeda, setelah tokenzier dipisahkan, filter data yang telah dibagi menjadi kata-kata melalui TokenFilter, seperti kata henti. Setelah pemfilteran, gabungkan semua data ke dalam TokenStream.
Referensi:
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Untuk menyesuaikan penganalisis Lucene berdasarkan Jieba.NET, referensi pertama adalah sebagai berikut:
Lihat langsung ke paket Lucene.Net.Analysis.Common, karena Lucene.Net.Analysis.Common mengandalkan paket Lucene.Net untuk diunduh secara otomatis.
Buat JiebaTokenizer.cs baru dengan kode berikut:
Buat JiebaAnalyzer.cs baru dengan kode berikut:
Lucene.Net Membuat dokumen dan pencarian baru
Tambahkan data dari situs web ke Lucene secara teratur atau dipicu, dan Lucene menyimpan dokumen di disk fisik melalui penganalisis, lalu memanggil antarmuka pencarian untuk menemukannya.
Kode kelas bantuan LuceneHelper adalah sebagai berikut:
Penyimpanan toko
Store.YES: Ini tidak hanya akan mengindeks data, tetapi juga menyimpan data, sehingga hasil pencarian dapat mengembalikan informasi bidang. Store.NO: Hanya data yang akan diindeks, dan data tidak akan disimpan, dan hasil pencarian tidak dapat memperoleh informasi bidang ini.Menghemat ruang disk;
Seperti yang ditunjukkan di bawah ini:
Jenis bidang bidang
Jenis bidang dalam Lucene.Net adalah Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Silakan gunakan tipe data yang sesuai dengan situasi Anda.
TextField vs. StringField
TextField pasti akan dileksikalisasi, StringField tidak akan melakukan analisis leksikal dari konten yang disimpan dalam dokumen, mengacu:Login hyperlink terlihat.
Terjadi pencarian majemuk
Ada 6 kombinasi berikut ini:
1. MUST dan MUST: Dapatkan persimpangan klausa kueri berturut-turut. 2. MUST dan MUST_NOT: Menunjukkan bahwa hasil pencarian klausa kueri yang sesuai dengan MUST_NOT tidak dapat disertakan dalam hasil kueri. 3. HARUS dan MUST_NOT: Ketika digunakan terus menerus, fungsinya sama dengan MUST dan MUST_NOT. 4. Ketika SHOULD dan MUST digunakan bersamaan, hasilnya adalah hasil pencarian klausa MUST, tetapi SHOULD dapat memengaruhi penyortiran. 5. HARUS dan SEHARUSNYA: Menunjukkan hubungan antara "atau", dan hasil pencarian akhir adalah penyatuan semua klausa pencarian. 6.MUST_NOT dan MUST_NOT: tidak berarti, pengambilan tanpa hasil.
Jalankan proyek
Pada titik ini, Anda dapat memulai proyek untuk menambahkan, memperbarui, dan mencari kode antarmuka sebagai berikut:
Kesalahan dapat dilaporkan sebagai berikut:
Pengecualian yang tidak ditangani terjadi saat memproses permintaan.
DirectoryNotFoundException: Could not find a part of the path 'C:\Users\itsvse_nuc11\source\repos\DiscuzSearch\DiscuzSearch\bin\Debug\net6.0\Resources\prob_trans.json'. Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(string fullPath, mode FileMode, akses FileAccess, berbagi FileShare, opsi FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Setelah penginstalan, Anda dapat melihat direktori Sumber Daya di direktori packages\jieba.NET, yang berisi kamus dan file data lain yang diperlukan untuk menjalankan jieba.NET, dan metode konfigurasi termudah adalah menyalin seluruh direktori Sumber Daya ke direktori tempat rakitan berada, sehingga nilai konfigurasi default bawaan akan digunakan jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet perlu menambahkan folder konfigurasi, kodenya adalah sebagai berikut:
Pengujian ini membuat 500 dokumen baru (terkait dengan situasi aktual saya, hanya untuk referensi), dan disk menempati 119KB, seperti yang ditunjukkan pada gambar di bawah ini:
(Akhir)
|