Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 4068|Yanıt: 2

[Kaynak] [Pratik dövüş] Lucene.Net + Jieba.NET kullanarak hafif bir site içi arama oluşturun

[Bağlantıyı kopyala]
2023-10-29 tarihinde 18:05:43 tarihinde yayınlandı | | | |
Gereksinimler: Sitede tam metin arama yaygın kullanılan bir fonksiyondur ve bu fonksiyon buna dayanarak yaygın olarak kullanılırElasticSearchSolrDağıtım ve geliştirme, şimdi ise iki yeni ürün yayınlandıRedisSearchMeiliSearchArama motoru ile ilk ikisi daha ağır, son ikisi ise ilk ikisi kadar ağır olmasa da yine de bağımlı hizmetler sunması gerekiyor; bu makale Lucene.Net + Jieba.NET kullanarak hafif bir site içi arama oluşturuyor.

Lucene.Net

Lucene.Net, Lucene'nin .NET portudur ve açık kaynaklı tam metin arama motoru geliştirme kitidir; yani tam metin bir arama motoru değil, tam bir sorgu motoru ve indeksleme motoru sağlayan tam metin bir arama motoru mimarisidir.

Site:Bağlantı girişi görünür.
GitHub adresi:Bağlantı girişi görünür.

Jieba.NET

Jieba.NET, Çin jieba dacımlı bir kelimedir. .NET sürümü (C# uygulaması). Çince metni için kelime segmentasyonu, konuşma kısmı açıklaması, anahtar kelime çıkarımı gibi işlevleri yerine getirebilir ve özel sözlükleri destekler.

GitHub adresi:Bağlantı girişi görünür.

Öncelikle, renderlere bir göz atalım:




Analizörü Özelleştirin

Lucene TokenStream'te Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream: Tokenizer işlendikten sonra elde edilen bir akış. Bu akış, TokenStream aracılığıyla etkili şekilde elde edilebilen kelime segmentasyonu hakkında çeşitli bilgileri saklar. Aşağıda, dosya akışını TokenStream'e dönüştürme süreci verilmiştir. Önce kelimeleri segmentlere ayırmak için Tokenizer kullanın, farklı tokenizer'ların farklı tokenzier'ları vardır, tokenzier ayrıldıktan sonra TokenFilter üzerinden kelimelere bölünmüş verileri, örneğin stop kelimelerini filtreleyin. Filtreleme yaptıktan sonra tüm verileri bir TokenStream'te birleştirin.

Referans:

Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.


Lucene analizörünü Jieba.NET temelinde özelleştirmek için ilk referans şöyledir:



Lucene.Net.Analysis.Common paketine doğrudan başvurun; çünkü Lucene.Net.Analysis.Common Lucene.Net paketinin otomatik olarak indirilmesine dayanır.

Aşağıdaki kodla yeni bir JiebaTokenizer.cs oluşturun:

Aşağıdaki kodla yeni bir JiebaAnalyzer.cs oluşturun:



Lucene.Net Yeni belgeler ve aramalar oluşturun

Bir web sitesinden Lucene'e düzenli veya tetiklenen veriler eklenir ve Lucene belgeyi analizör aracılığıyla fiziksel bir diskte saklar, ardından arama arayüzünü çağırarak onu bulur.

LuceneHelper yardım sınıfı kodu şu şekildedir:



Depo depolama

Store.YES: Sadece verileri indekslemekle kalmaz, aynı zamanda verileri de kaydeder, böylece arama sonuçları alan bilgilerini geri döndürebilir.
Store.NO: Sadece veriler indekslenir, veri kaydedilmez ve arama sonuçları bu alan bilgisini elde edemez.Disk alanı tasarrufu sağlar

Aşağıda gösterildiği gibi:




Alan alanı tipi

Lucene.Net'daki alan türleri şunlardır: Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Lütfen durumunuza göre uygun veri türünü kullanın.

TextField vs. StringField

TextField kesinlikle sözcükleştirilecek, StringField doc'ta depolanan içeriğin sözcek analizini yapmaz, bkâh:Bağlantı girişi görünür.

Bileşik araması


Aşağıdakilerin 6 kombinasyonu vardır:

1. GEREKLİ ve GEREKLİSİ: Ardışık sorgu maddelerinin kesişimini edinin.
2. MUST ve MUST_NOT: MUST_NOT ile ilgili sorgu maddesinin arama sonuçlarının sorgu sonuçlarına dahil edilemeyeceğini gösterir.
3.SHOULD ve MUST_NOT: Sürekli kullanıldığında, fonksiyon MUST ve MUST_NOT ile aynıdır.
4. SHOULD ve MUST birlikte kullanıldığında, sonuç MUST maddesinin arama sonucu olur, ancak SHOULD sıralamayı etkileyebilir.
5. SHOULD ve SHOULD: "ve" arasındaki ilişkiyi gösterir ve nihai arama sonucu tüm arama maddelerinin birleşimidir.
6.MUST_NOT ve MUST_NOT: anlamsız, sonuçsuz geri getirme.


Projeyi yürütmek

Bu noktada, arayüz kodunu eklemek, güncellemek ve aramak için projeye aşağıdaki şekilde başlayabilirsiniz:


Hatalar aşağıdaki şekilde bildirilebilir:

Talep işlenirken yönetilmeyen bir istisna meydana geldi.
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, FileMode mode, FileAccess erişimi, FileShare paylaşımı, FileOptions seçenekleri)

TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception.

jieba.net Kurulumdan sonra, packages\jieba.NET dizininde Resources dizinini görebilirsiniz; bu dizin, jieba.NET çalıştırmak için gereken sözlük ve diğer veri dosyalarını içerir; en kolay yapılandırma yöntemi, tüm Resources dizinini assemble'in bulunduğu dizine kopyalamaktır; böylece yerleşik varsayılan yapılandırma değerleri jieba.NET kullanılır.

C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources

JiebaNet'in bir yapılandırma klasörü eklemesi gerekiyor, kod şu şekildedir:

Test 500 yeni belge oluşturdu (sadece referans olarak, gerçek durumumla ilgili) ve disk aşağıdaki şekilde gösterildiği gibi 119KB yer kaplıyor:



(Son)




Önceki:Resmi hesabı takip edin ve "davet kodu"nu ücretsiz alın
Önümüzdeki:.NET, veritabanı varbinary diziyi bayt[] dizisine dönüştürür
 Ev sahibi| 2023-10-29 tarihinde 18:10:40 tarihinde yayınlandı |
Elasticsearch (ES) hata çözümüne veri yazamıyor
https://www.itsvse.com/thread-10568-1-1.html

Elasticsearch, disk alanı boşaltmak için indeksleri otomatik olarak temizler
https://www.itsvse.com/thread-10273-1-1.html

Elasticsearch-7.x, güvenlik doğrulaması için xpack kullanır
https://www.itsvse.com/thread-10206-1-1.html

Docker kullanarak Elasticsearch servisini dağıtın
https://www.itsvse.com/thread-10148-1-1.html

Elasticsearch, verileri yedeklemek ve taşımak için elasticdump kullanır
https://www.itsvse.com/thread-10143-1-1.html

Windows'ta elasticsearch 7.10.2 eğitiminin bağımsız sürümünü yükleyin
https://www.itsvse.com/thread-9962-1-1.html

Elasticsearch arama vurgu yapılandırmasına giriş
https://www.itsvse.com/thread-9562-1-1.html

.NET/C# İstek ve yanıt bilgilerini görüntülemek için Elasticsearch hata hata ayıklamasını kullanın
https://www.itsvse.com/thread-9561-1-1.html

ASP.NET Çekirdek Bağlantı İzi (5) Jaeger verileri elasticsearch'te kalıcıdır
https://www.itsvse.com/thread-9553-1-1.html

Elasticsearch (ES) klon indeksini çoğaltıyor
https://www.itsvse.com/thread-9545-1-1.html

Elasticsearch(ES) küme sağlığı: sarı (7'den 6) durumu
https://www.itsvse.com/thread-9544-1-1.html

Elasticsearch(ES) küme sağlığı: kırmızı Arıza analizi
https://www.itsvse.com/thread-9543-1-1.html

ElasticSearch (geo_point) içinde Java Coğrafi Konum Bilgisi
https://www.itsvse.com/thread-6444-1-1.html

ElasticsearchParseException[alanı[alanı] ya [lat], [lon] ya da [geohash]] olmalıdır.
https://www.itsvse.com/thread-6442-1-1.html

elasticsearch-mappingfield tipi
https://www.itsvse.com/thread-6436-1-1.html

Elasticsearch:No handler for type [string] declared on field[XX]的解决办法
https://www.itsvse.com/thread-6420-1-1.html

【Practical Action】Kibana installation tutorial for Elasticsearch
https://www.itsvse.com/thread-6400-1-1.html

Elasticsearch gelişmiş özellik ailesinin coğrafi koordinatları
https://www.itsvse.com/thread-6399-1-1.html

ElasticSearch bileşik sorguları kullanmalı, kullanmalı must_not
https://www.itsvse.com/thread-6334-1-1.html

Elasticsearch tüm belge verilerini siler ve indeksler
https://www.itsvse.com/thread-6321-1-1.html

[Gerçek dövüş]. net/c# Elasticsearch aramasını NEST üzerinden çağır [kaynak koduyla]
https://www.itsvse.com/thread-6294-1-1.html

Tek düğümlü unassigned_shards Elasticsearch için nedenler ve çözümler
https://www.itsvse.com/thread-6193-1-1.html

Elasticsearch-6.5.2 içinde elasticsearch-analysis-ik kurulumu üzerine tutorial
https://www.itsvse.com/thread-6191-1-1.html

elasticsearch-6.5.2 elasticsearch-head eklentisini yükleyin
https://www.itsvse.com/thread-6190-1-1.html

Centos 7 kurulum ve dağıtım elasticsearch-6.5.2 tutorial
https://www.itsvse.com/thread-6173-1-1.html

Arama motoru seçimi: Elasticsearch vs Solr
https://www.itsvse.com/thread-6168-1-1.html
 Ev sahibi| 2023-11-5 tarihinde yayınlandı 21:27:45 |
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com