Lucene.NET
ile E-Posta Adresi Alanlarını Arama Yöntemleri
Lucene.NET
kullanarak e-posta adreslerini aramak, arama sisteminin dizeleri yorumlama biçimi nedeniyle biraz zorlu olabilir. Belirli bir e-posta alanını (örneğin @gmail.com
) aramaya çalıştıysanız ve hatalar veya sonuçsuz kaldıysanız, hiç merak etmeyin; yalnız değilsiniz. Bu blog yazısı, e-posta adreslerini etkili bir şekilde sorgulamanıza yardımcı olan özel bir arama çözümü oluşturma sürecini anlatacaktır.
Sorun
Lucene.NET
üzerinde e-posta adreslerini aramaya çalışırken aşağıdaki sorunlarla karşılaşabilirsiniz:
- Yıldız İşareti Hatası:
*@gmail.com
gibi bir joker karakter sorgusu kullanmak hata verir; çünkü yıldız işaretleri bir sorguya başlayamaz. - Tam Kelime Arama Sınırlamaları:
@gmail.com
ile doğrudan bir arama sorgusu çalıştırmak,foo@gmail.com
gibi e-posta adreslerine sonuç döndürmez, çünkü sözel aramalar genellikle bunu tam bir kelime olarak ele alır.
Bu sınırlamalar, özellikle alan adlarıyla özel olarak arama yapmak istediğinizde sinir bozucu olabilir.
Çözüm
Bu sorunu çözmek için Lucene
‘in e-posta adreslerini analiz etme ve tokenlama yöntemini özelleştirebiliriz. Bu, iki bileşen oluşturmaya dahildir:
- Tokenlayıcı: Metni kriterlere dayalı olarak tokenlara ayıran özel bir davranış.
- Analizör: Tokenlayıcıyı kullanarak indeksleme için bir token akışı oluşturma.
Adım 1: Özel Tokenlayıcı Oluşturma
WhitespaceAndAtSymbolTokenizer
adlı özel bir tokenlayıcı oluşturarak başlayacağız. Bu tokenlayıcı, hem boşlukları hem de @
simgesini yeni kelimelerin göstericisi olarak kabul edecek, bu da bize e-posta adreslerini daha etkili bir şekilde ayırma olanağı tanıyacak.
İşte özel tokenlayıcınız için kaynak kodu:
class WhitespaceAndAtSymbolTokenizer : CharTokenizer
{
public WhitespaceAndAtSymbolTokenizer(TextReader input)
: base(input)
{
}
protected override bool IsTokenChar(char c)
{
// Boşluk karakterlerini ve @ simgesini yeni kelimelerin göstergeleri olarak kabul et.
return !(char.IsWhiteSpace(c) || c == '@');
}
}
Adım 2: Özel Analizör Oluşturma
Sonraki adımda, özel tokenlayıcımızı kullanan WhitespaceAndAtSymbolAnalyzer
‘ı uygulayacağız:
internal class WhitespaceAndAtSymbolAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
return new WhitespaceAndAtSymbolTokenizer(reader);
}
}
Adım 3: İndeksi Yeniden Oluşturma
Özel tokenlayıcı ve analizörü kurduktan sonra, yeni analizörü kullanarak indeksinizi yeniden oluşturmanız gerekecek. Bunu nasıl yapabileceğinizi aşağıda bulabilirsiniz:
IndexWriter index = new IndexWriter(indexDirectory, new WhitespaceAndAtSymbolAnalyzer());
index.AddDocument(myDocument);
Adım 4: Arama Gerçekleştirme
Arama yaparken, özel analizörü de kullandığınızdan emin olun. Analizörü kullanarak sorgulama yapmanın basit bir kod örneği aşağıda verilmiştir:
IndexSearcher searcher = new IndexSearcher(indexDirectory);
Query query = new QueryParser("TheFieldNameToSearch", new WhitespaceAndAtSymbolAnalyzer()).Parse("@gmail.com");
Hits hits = query.Search(query);
Sonuç
WhitespaceAndAtSymbolTokenizer
ve WhitespaceAndAtSymbolAnalyzer
‘ı kullanarak, Lucene.NET
içinde e-posta adresi alanlarını etkili bir şekilde arayabilirsiniz. Bu çözüm, yalnızca @gmail.com
için arama yapma sorununu çözmekle kalmaz; aynı zamanda gelecekte e-posta alanı aramalarınızı ölçeklendirmek için sağlam bir temel oluşturur.
Özel tokenizasyonu etkili arama stratejileriyle birleştirmek, uygulamalarınızda önemli bir fark yaratabilir. Eğer Lucene.NET
uygulamanız ile ilgili herhangi bir sorunuz varsa ya da yardıma ihtiyacınız olursa, lütfen aşağıdaki yorumlarda bize ulaşmaktan çekinmeyin!