كيفية استخدام Lucene.NET للبحث عن نطاقات عناوين البريد الإلكتروني

يمكن أن يكون البحث عن عناوين البريد الإلكتروني باستخدام Lucene.NET تحديًا بعض الشيء بسبب الطريقة التي يفسر بها نظام البحث السلاسل. إذا كنت قد حاولت يومًا ما البحث عن نطاق بريد إلكتروني معين (مثل @gmail.com) وانتهى بك الأمر بأخطاء أو عدم وجود نتائج، فأنت لست وحدك. ستوجهك هذه المدونة خلال عملية إنشاء حل بحث مخصص يسمح لك باستعلام عناوين البريد الإلكتروني بفعالية.

المشكلة

عندما تحاول البحث عن عناوين البريد الإلكتروني في Lucene.NET، قد تواجه المشاكل التالية:

  • خطأ مع العلامات النجمية: استخدام استعلام wildcard مثل *@gmail.com يؤدي إلى حدوث خطأ، حيث لا يمكن أن تبدأ العلامات النجمية الاستعلام.
  • قيود البحث بكلمة كاملة: تشغيل استعلام بحث مباشرةً بـ @gmail.com لن يعيد نتائج لعناوين البريد الإلكتروني مثل foo@gmail.com، حيث إن عمليات البحث اللفظية عادةً ما تعالجها ككلمة كاملة.

يمكن أن تكون هذه القيود محبطة، خاصةً عندما تريد البحث بشكل محدد حسب النطاق.

الحل

لمعالجة هذه المشكلة، يمكننا تخصيص كيفية تحليل Lucene وعملية تقسيم عناوين البريد الإلكتروني. يشمل ذلك إنشاء مكونين:

  1. Tokenizer: سلوك مخصص لتقسيم النص إلى رموز بناءً على معايير محددة.
  2. Analyzer: استخدام الـ tokenizer لإنشاء تيار من الرموز لأغراض الفهرسة.

الخطوة 1: إنشاء Tokenizer مخصص

سنبدأ بإنشاء tokenizer مخصص يسمى WhitespaceAndAtSymbolTokenizer. سيعالج هذا tokenizer كل من المسافات البيضاء ورمز @ كمؤشرات لكلمات جديدة، مما يسمح لنا بتقسيم عناوين البريد الإلكتروني بشكل أكثر فعالية.

إليك الكود المصدر للـ tokenizer المخصص الخاص بك:

class WhitespaceAndAtSymbolTokenizer : CharTokenizer
{
    public WhitespaceAndAtSymbolTokenizer(TextReader input)
        : base(input)
    {
    }

    protected override bool IsTokenChar(char c)
    {
        // اجعل رموز المسافات البيضاء ورمز @ مؤشرات لكلمات جديدة.
        return !(char.IsWhiteSpace(c) || c == '@');
    }
}

الخطوة 2: إنشاء محلل مخصص

بعد ذلك، سنقوم بتنفيذ WhitespaceAndAtSymbolAnalyzer، الذي يستخدم الـ tokenizer المخصص لدينا:

internal class WhitespaceAndAtSymbolAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        return new WhitespaceAndAtSymbolTokenizer(reader);
    }
}

الخطوة 3: إعادة بناء الفهرس الخاص بك

بعد إعداد tokenizer والمحلل المخصصين، ستحتاج إلى إعادة إنشاء الفهرس الخاص بك باستخدام المحلل الجديد. إليك كيفية القيام بذلك:

IndexWriter index = new IndexWriter(indexDirectory, new WhitespaceAndAtSymbolAnalyzer());
index.AddDocument(myDocument);

الخطوة 4: إجراء عمليات البحث

عند إجراء عمليات البحث، تأكد من استخدام المحلل المخصص أيضًا. إليك مقتطف كود بسيط يوضح كيفية الاستعلام باستخدام المحلل:

IndexSearcher searcher = new IndexSearcher(indexDirectory);
Query query = new QueryParser("TheFieldNameToSearch", new WhitespaceAndAtSymbolAnalyzer()).Parse("@gmail.com");
Hits hits = query.Search(query);

الخاتمة

من خلال استخدام WhitespaceAndAtSymbolTokenizer وWhitespaceAndAtSymbolAnalyzer، يمكنك البحث بفعالية عن نطاقات عناوين البريد الإلكتروني في Lucene.NET. لا يحل هذا الحل المشكلة الفورية للبحث عن @gmail.com فقط، بل يشكل أيضًا أساسًا قويًا لتوسيع نطاقات البريد الإلكتروني التي يمكن البحث عنها في المستقبل.


يمكن أن يُحدث دمج تقنيات تقسيم مخصصة مع استراتيجيات بحث فعالة فرقًا كبيرًا في تطبيقاتك. إذا كان لديك أي أسئلة أخرى أو تحتاج إلى مساعدة في تنفيذ Lucene.NET الخاص بك، فلا تتردد في طرح ذلك في التعليقات أدناه!