البحث واسترجاع المعلومات

يعد محرك البحث مكونًا مهمًا في نشاط الجميع عبر الإنترنت. نحن نبحث عن معلومات لاتخاذ قرار بشأن أفضل العناصر للشراء ، وأماكن جميلة لتناول الطعام بالخارج ، والشركات التي يجب زيارتها…الخ. نعتمد أيضًا بشكل كبير على البحث للتدقيق في رسائل البريد الإلكتروني والوثائق والمعاملات المالية الخاصة بنا. تحدث الكثير من تفاعلات البحث هذه من خلال النص (أو تحويل الكلام إلى نص في الإدخال الصوتي). هذا يعني أن الكثير من معالجة اللغة تحدث داخل محرك البحث. وبالتالي ، يمكننا القول أن معالجة اللغة الطبيعية (NLP) تلعب دورًا مهمًا في محركات البحث الحديثة.

لنبدأ بإلقاء نظرة سريعة على ما يحدث عند البحث. عندما يبحث المستخدم باستخدام استعلام ، يقوم محرك البحث بتجميع قائمة مرتبة من المستندات التي تطابق الاستعلام. ولكي يحدث هذا ، يجب أولاً إنشاء “فهرس” للمستندات والمفردات المستخدمة فيها ثم استخدامها للبحث عن النتائج وترتيبها. أحد الأشكال الشائعة لفهرسة البيانات النصية وترتيب نتائج البحث لمحركات البحث هو شيء   TF-IDF سبق و تحدثنا عنه هنا و هنا.

 يمكن أيضًا استخدام التطورات الأخيرة في نماذج التعلم العميق الخاصة بمعالجة اللغة الطبيعية لهذا الغرض. على سبيل المثال ، بدأت Google مؤخرًا في ترتيب نتائج البحث وعرض مقتطفات البحث باستخدام نموذج BERT. يزعمون أن هذا قد أدى إلى تحسين جودة وملاءمة نتائج البحث الخاصة بهم . هذا مثال مهم لفائدة معالجة اللغة الطبيعية في محرك البحث الحديث.

بصرف النظر عن هذه الوظيفة الرئيسية لتخزين البيانات وترتيب نتائج البحث ، تتضمن العديد من الميزات في محرك البحث الحديث معالجة اللغة الطبيعية. على سبيل المثال ، ضع في اعتبارك لقطة شاشة من نتيجة بحث Google الموضحة في الشكل 7-1 ، والتي توضح بعض الميزات التي تستخدم معالجة اللغة الطبيعية.

  1. التصحيح الإملائي: أدخل المستخدم تهجئة غير صحيحة ، وقدم محرك البحث اقتراحًا يوضح التهجئة الصحيحة.
  1. الاستعلامات ذات الصلة: تُظهر ميزة “الأشخاص يسألون أيضًا” الأسئلة الأخرى ذات الصلة التي يطرحها الأشخاص حول ماري كوري.
  1. استخراج المقتطف: تعرض جميع نتائج البحث مقتطفًا نصيًا يتضمن طلب البحث.
  1. استخراج معلومات السيرة الذاتية: على الجانب الأيمن ، يوجد مقتطف صغير يعرض تفاصيل السيرة الذاتية لماري كوري جنبًا إلى جنب مع بعض المعلومات المحددة المستخرجة من النص. هناك أيضًا بعض الاقتباسات وقائمة بالأشخاص المرتبطين بها بطريقة ما.
  1. تصنيف نتائج البحث: في الأعلى ، توجد فئات لنتائج البحث: الكل والأخبار والصور ومقاطع الفيديو وما إلى ذلك.

هنا ، نرى مجموعة من المفاهيم التي تعلمناها في هذه السلسة قيد الاستخدام. في حين أن هذه ليست بأي حال من الأحوال الأماكن الوحيدة المستخدمة فيها معالجة اللغة الطبيعية في محركات البحث ، إلا أنها أمثلة على الأماكن التي يكون فيها معالجة اللغة الطبيعية مفيدة في جانب واجهة المستخدم للبحث.

ومع ذلك ، هناك ما هو أكثر بكثير من البحث عن معالجة اللغة الطبيعية ، ويبدو أن إنشاء محرك بحث هو محاولة ضخمة تتطلب الكثير من البنية التحتية. هذا قد يجعل المرء يتساءل: متى تحتاج إلى بناء محرك بحث ، وكيف؟ هل نبني دائمًا محركات بحث ضخمة مثل Google؟ دعونا نلقي نظرة على سيناريوهين للإجابة على هذه الأسئلة.

تخيل أننا نعمل في شركة و  تريد شركتنا تطوير محرك بحث يقوم بالزحف إلى المنتديات ولوحات المناقشة من جميع أنحاء الويب ويسمح للمستخدمين بالاستعلام عن هذه المجموعة الكبيرة. ضع في اعتبارك سيناريو آخر: لنفترض أن عميلنا هو شركة محاماة يتم تحميل الكثير من المستندات القانونية من العملاء والمصادر القانونية الأخرى كل يوم. لقد طُلب منا تطوير محرك بحث مخصص للعميل للبحث في قاعدة البيانات الخاصة به. كيف يختلف هذان السيناريوهان؟

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

  • محركات البحث العامة ، مثل Google و Bing ، التي تزحف على الويب وتهدف إلى تغطية أكبر قدر ممكن من خلال البحث باستمرار عن صفحات ويب جديدة
  • محركات بحث المؤسسة ، حيث تقتصر مساحة البحث لدينا على مجموعة أصغر من المستندات الموجودة بالفعل داخل المؤسسة

غالباً ، فإن الشكل الثاني للبحث هو حالة الاستخدام الأكثر شيوعًا التي قد تواجهها في مكان عملك .

مكونات محرك البحث

كيف يعمل محرك البحث؟ ما هي بعض المكونات الأساسية؟ نقدمها بإيجاز من خلال الشكل أدناه، المأخوذ من  الورقة البحثية الشهيرة من عام 1998 عن معمارية جوجل .

يوجد العديد من المكونات الصغيرة والكبيرة داخل محرك البحث ، كما هو موضح في الشكل. المكونات الثلاثة الرئيسية التي يمكن اعتبارها لبنات البناء (والمكون الرابع الذي أصبح شائعًا الآن أيضًا) هي:

الزاحف (Crawler)

يجمع كل المحتوى لمحرك البحث. تتمثل مهمة الزاحف في اجتياز الويب باتباع مجموعة من عناوين URL الأولية وبناء مجموعته من عناوين URL من خلالها بطريقة واسعة النطاق أولاً. يزور كل عنوان URL ، ويحفظ نسخة من المستند ، ويكشف الارتباطات التشعبية الصادرة ، ثم يضيفها إلى قائمة عناوين URL التي سيتم زيارتها بعد ذلك.

 تتضمن القرارات النموذجية التي يجب اتخاذها عند تصميم الزاحف تحديد ما يجب الزحف إليه ، ووقت إيقاف الزحف ، ووقت إعادة الزحف ، وما يجب إعادة الزحف إليه ، وكيفية التأكد من عدم قيامنا بالزحف إلى محتوى مكرر.

لكن ، حتى عندما تضطر إلى تطوير نوع من محرك البحث العام (على سبيل المثال ، محرك بحث مدونة) ، فمن غير المحتمل أن تصادف سيناريو حيث يجب عليك تصميم الزاحف الخاص بك. يمكن تخصيص برامج الزحف الجاهزة للإنتاج ، مثل Apache Nutch  و Scrapy ، واستخدامها لمشروعك في مثل هذه السيناريوهات.

مفهرس (Indexer)

يوزع ويخزن المحتوى الذي يجمعه الزاحف ويبني “فهرسًا” حتى يمكن البحث عنه واسترجاعه بكفاءة. في حين أنه من الممكن فهرسة مقاطع الفيديو والصوت والصور وما إلى ذلك ، فإن فهرسة النص هي أكثر أنواع الفهرسة شيوعًا في مشاريع العالم الحقيقي.

 تم تطوير هياكل البيانات لفهرس محرك البحث مع الأخذ في الاعتبار الحاجة إلى البحث السريع والفعال لعملية الزحف الخاصة به و ذلك استجابةً لاستعلام المستخدم. أحد الأمثلة على خوارزمية الفهرسة الشائعة المستخدمة في محركات البحث على الويب هو “الفهرس المقلوب (inverted index) ” ، الذي يخزن قائمة المستندات المرتبطة بكل كلمة في مفرداتها. كما هو الحال مع برامج الزحف.

 من غير المحتمل أن تواجه موقفًا يتعين عليك فيه تطوير المفهرس الخاص بك. عادةً ما تُستخدم برامج مثل Apache Solr و Elasticsearch في الصناعة لبناء فهرس والبحث فيه.

باحث (Searcher)

يبحث في الفهرس ويصنف نتائج البحث لاستعلام المستخدم بناءً على صلة النتائج بالاستعلام. من المحتمل أن ينتج عن استعلام بحث نموذجي على Google أو Bing مئات وآلاف النتائج.

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

 في الواقع إن TF-IDF هي إحدى الطرق الشائعة للبحث عن نتائج البحث وترتيبها.

التغذية الرجعية (Feedback)

مكون رابع ، وهو شائع الآن في جميع محركات البحث ، يتتبع ويحلل تفاعلات المستخدم مع محرك البحث ، مثل النقرات ، والوقت الذي يقضيه في البحث وفي كل نتيجة يتم النقر عليها ، وما إلى ذلك ، ويستخدم للتحسين المستمر لـ نظام البحث.

و لقرأت المزيد عن محركات البحث و تطويره يمكن قرأت هذا الكتاب بعنوان (Introduction to Information Retrieval). 

يعد استرجاع المعلومات مجال بحث رئيسي في حد ذاته ، ويعد تطوير محركات البحث مهمة ضخمة تتضمن الكثير من الحسابات والبنية التحتية. جميع الموضوعات التي تمت مناقشتها أعلاه لم يتم حلها بشكل كامل بعد. تم تقديم نظرة عامة حول كيفية عمل محرك البحث من أجل الدخول في مناقشة حول مكان ظهور معالجة اللغة الطبيعية في الصورة وكيفية تطوير محركات البحث المخصصة. 

مع هذه المقدمة ، دعنا ننتقل إلى الشكل الذي يبدو عليه مسار محرك البحث النموذجي في حالات الاستخدام التي قد تواجهها في مكان عملك وما هي طرق معالجة اللغة الطبيعية التي تعلمناها حتى الآن والتي يمكن استخدامها في هذا الخط.

خط إنتاج بحث مؤسسي نموذجي

لنفترض أننا نعمل في صحيفة كبيرة وأننا مكلفون بتطوير محرك بحث لموقعها على الويب. لقد ذكرنا بالفعل أن Solr و ElasticSearch يُستخدمان عادةً لمعالجة مثل هذه السيناريوهات. كيف سنستخدمهم؟ دعنا نجري شرحًا تفصيليًا خطوة بخطوة ونناقش أيضًا أدوات معالجة اللغة الطبيعية التي سنحتاجها في هذه العملية.

  • الزحف / اكتساب المحتوى

لا نحتاج حقًا إلى برنامج زاحف في هذه الحالة ، لأننا لا نحتاج إلى بيانات من مواقع الويب الخارجية. ما نحتاجه هو طريقة لقراءة البيانات من الموقع حيث يتم تخزين جميع المقالات الإخبارية (على سبيل المثال ، في قاعدة بيانات محلية أو في بعض المواقع السحابية).

  • تسوية النص

بمجرد أن نجمع المحتوى ، اعتمادًا على تنسيقه ، نبدأ أولاً باستخراج النص الرئيسي وتجاهل المعلومات الإضافية (على سبيل المثال ، رؤوس الصحف). من الشائع أيضًا إجراء بعض خطوات المعالجة المسبقة ، مثل التعميل (tokenizing) ، وإزالة كلمات التوقف (stop word removal) ، و التشذيب (stemming)  ، وما إلى ذلك ، قبل التحويل.

  • الفهرسة

للفهرسة ، علينا إنشاء متجهات النص ، يعد TF-IDF مخطط شائع لهذا ، كما ناقشنا سابقًا. ومع ذلك ، مثل Google ، يمكننا أيضًا استخدام BERT بدلاً من ذلك. كيف نستخدم بيرت للبحث؟ 

يمكننا استخدام BERT للحصول على تمثيل متجه للاستعلام والمستندات وإنشاء قائمة مرتبة بأقرب المستندات لاستعلام معين من حيث مسافة المتجه. توضح هذه المقالة كيف يمكننا استخدام مثل هذه التضمينات النصية للفهرسة والبحث باستخدام Elasticsearch.

بالإضافة إلى فهرسة محتوى المقالة بالكامل ، يمكننا أيضًا إضافة حقول / أوجه إضافية إلى الفهرس لكل مستند والبحث لاحقًا عن طريق هذه الأوجه. على سبيل المثال ، بالنسبة لإحدى الصحف ، يمكن أن يكون هذا هو فئة الأخبار ، وعلامات أخرى مثل المدن المعنية ، وما إلى ذلك. يمكن استخدام مناهج تصنيف النص التي تحدثنا عنها في هذه المقالات (هنا ، هنا ، هنا )

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

  1. معالجة الاستعلام وتنفيذه: يتم تمرير استعلام البحث من خلال عملية تسوية النص على النحو الوارد أعلاه. بمجرد تأطير الاستعلام ، يتم تنفيذه ، ويتم استرداد النتائج وتصنيفها وفقًا لبعض المفاهيم ذات الصلة. توفر مكتبات محركات البحث مثل Elasticsearch وظائف مخصصة لتسجيل النتائج لتعديل ترتيب المستندات المسترجعة لاستعلام معين .
  1. التعليقات والترتيب: لتقييم نتائج البحث وجعلها أكثر صلة بالمستخدم ، يتم تسجيل سلوك المستخدم وتحليله ، ويتم استخدام إشارات مثل النقر فوق الإجراء على النتيجة والوقت الذي يقضيه في صفحة النتائج لتحسين خوارزمية الترتيب. من الأمثلة في حالة صحيفتنا معرفة ما يفضله القارئ (على سبيل المثال ، يفضل القارئ قراءة الأخبار المحلية من المنطقة X) وإظهار ترتيب مخصص للمقالات المقترحة.

نأمل أن توضح حالة استخدام الصحيفة هذه الشكل الذي يبدو عليه خط إنتاج تطوير محرك بحث المؤسسة النموذجي. كما هو الحال مع العديد من تطبيقات البرامج ، أثرت التطورات الأخيرة في مجال تعلم الألة أيضًا على البحث في المؤسسة. ذكرنا بإيجاز كيف يمكن استخدام BERT والتمثيلات النصية الأخرى القائمة على التضمين مع Elasticsearch. أما Amazon Kendra ، وهو محرك بحث مؤسسي مدعوم بالتعلم الآلي ، هو إضافة حديثة إلى هذه المساحة.

إنشاء محرك بحث: مثال

الآن بعد أن أصبحت لدينا فكرة عن مكونات محرك البحث وكيفية عملها معًا في سيناريو نموذجي ، دعنا نلقي نظرة سريعة على إنشاء محرك بحث صغير باستخدام واجهة برمجة تطبيقات Python من Elasticsearch.

 سنستخدم مجموعة بيانات ملخصات كتب جامعة كارنيجي ميلون (هنا) ، والتي تتكون من ملخصات محتوى لما يزيد عن 16000 كتاب مستخرج من صفحات ويكيبيديا. سنقوم بتوضيح العملية باستخدام 500 مستند لدينا المحتوى الخاص بنا بالفعل ، لذا لا نحتاج إلى زاحف. باستخدام حالة استخدام بسيطة لا تتضمن معالجة مسبقة إضافية (بدون تشذيب، على سبيل المثال) ، يوضح مقتطف الكود التالي كيفية إنشاء فهرس باستخدام Elasticsearch:

'''
 في الخلفية elastic search لإستخدام هذا الكود لابد من تشغيل 
 
'''

from elasticsearch import Elasticsearch
from datatime import  datetime

# بعد تشغيله ElasticSearch إستدعاء 
es = Elasticsearch([{'host':'localhost','port':9200}])
if es.indices.exists(index="myindex"):
    es.indices.delete(index='myindex', ignore=[400,404])

# بناء فهرس من ملخص الكتب 
path = "Data/booksummaries.txt"
count = 1

for line in open(path):
    fields = line.split("\t")
    doc = {'id': fields[0],
            'title' : fields[2],
            'author' : fields[3],
            'summary' : fields[6]}
    
    res = es.index(index = "myindex", id=fields[0], body=doc)
    count = count + 1
    if count%100 == 0:
        print("indexed 100 documents")
    if count == 501:
        break

# معرفة حجم الفهرس
res = es.search(index="myindex", body={"query": {"match_all": {}}})
print("Your index has %d entries" % res['hits']['total']['value'])


# إجراء إستعلام 
res = es.search(index="myindex", body={"query": {"match": {"summary": "animal"}}})
print("Your search returned %d results." % res['hits']['total']['value'])

# طباعة العنوان و الملخص
print(res["hits"]["hits"][2]["_source"]["title"])
print(res["hits"]["hits"][2]["_source"]["summary"][:100])

ينشئ هذا الكود فهرسًا بأربعة حقول لكل مستند – المعرف ، والعنوان ، والمؤلف ، والملخص – وكلها متوفرة في مجموعة البيانات نفسها. بمجرد إنشاء الفهرس ، فإنه يقوم بتشغيل استعلام للتحقق من حجم الفهرس. في هذه الحالة ، سيظهر الإخراج كـ 500 إدخال. بمجرد إنشاء الفهرس ، يتعين علينا معرفة كيفية استخدامه لإجراء البحث. بينما لن نتطرق إلى جوانب تصميم واجهة المستخدم لعملية البحث ، يوضح مقتطف الكود التالي كيفية البحث باستخدام Elasticsearch:

# مطابقة الإستعلام بإستخدام كل من المطابقة الكاملة و المطابقة الجزئية 
while True:
    query = input("Enter your search query: ")
    if query == "STOP":
        break
    res = es.search(index="myindex", body={"query": {"match_phrase": {"summary": query}}})
    print("Your search returned %d results:" % res['hits']['total']['value'])
    for hit in res["hits"]["hits"]:
        print(hit["_source"]["title"])
        loc = hit["_source"]["summary"].lower().index(query)
        print(hit["_source"]["summary"][:100])
        print(hit["_source"]["summary"][loc-100:loc+100])

يستمر هذا المقتطف في مطالبة المستخدم بإدخال استعلام بحث حتى يتم كتابة الكلمة STOP ويعرض نتائج البحث ، جنبًا إلى جنب مع مقتطف قصير يحتوي على عبارة البحث. على سبيل المثال ، إذا بحث المستخدم عن كلمة “countess” ، فستظهر النتائج على النحو التالي:

Enter your search query: countess
Your search returned 7 results:
All's Well That Ends Well
71
 Helena, the orphan daughter of a famous physician, is the ward of the Countess
 of Rousillon, and ho
…
…
…
Enter your search query: STOP

يحتوي Elasticsearch على العديد من الميزات لتغيير وظيفة الترتيب، ولتغيير عملية البحث من حيث صياغة الاستعلام (على سبيل المثال ، المطابقة التامة مقابل المطابقة الغامضة) دعنا نلقي نظرة على دراسة حالة لبناء محرك بحث مؤسسي من البداية وتحسينه.

دراسة حالة: بحث في متجر الكتب

تخيل سيناريو حيث لدينا متجر جديد للتجارة الإلكترونية يركز على الكتب وعلينا بناء خط إنتاج البحث الخاص به. لدينا بيانات وصفية مثل المؤلف والعنوان والملخص. يمكن أن تكون وظيفة البحث التي رأيناها سابقًا بمثابة الأساس في البداية. يمكننا إعداد الواجهة الخلفية لمحرك البحث الخاص بنا أو استخدام خدمات عبر الإنترنت مثل Elasticsearch أو Elastic on Azure 

قد يكون لإخراج البحث الافتراضي هذا مجموعة من المشكلات. على سبيل المثال ، قد تعرض النتائج مع مطابقات الاستعلام التامة في العنوان أو الملخص لتكون أعلى من النتائج الأكثر صلة والتي ليست مطابقة تامة. قد تكون بعض المطابقات الدقيقة عبارة عن كتب مكتوبة بشكل سيئ مع مراجعات سيئة ، وهو ما لا نأخذ في الاعتبار في ترتيب البحث لدينا. على سبيل المثال ، ضع في اعتبارك هذين الكتابين عن ماري كوري: Marie Curie Biography و The Life of Marie Curie.. هذا الأخير هو سيرة ذاتية موثوقة عن ماري كوري ، في حين أن الأول هو كتاب جديد ومراجعاته سيئة. ولكن أثناء الاستعلام عن “سيرة ماري كوري” ، حصل الكتاب الأقل صلة ، سيرة ماري كوري ، على مرتبة أعلى من كتاب حياة ماري كوري الشهير.

يمكننا دمج مقاييس العالم الحقيقي التي تأخذ هذا في الاعتبار في محرك البحث الخاص بنا. على سبيل المثال ، يمكن دمج عدد مرات عرض الكتاب وبيعه وعدد المراجعات وتقييم الكتاب في وظيفة ترتيب البحث. في Elasticsearch ، يمكن القيام بذلك عن طريق استخدام الدرجات الوظيفية وإعطاء وزن محدد يدويًا لعدد التقييمات وعدد الكتب المباعة ومتوسط ​​التقييم.

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

يجب أن نبدأ في جمع تفاعلات المستخدم مع محرك البحث لتحسينه بشكل أكبر. يمكن أن تتضمن هذه التفاعلات استعلام البحث ونوع المستخدم وإجراءاته على الكتب. عند تسجيل معلومات البحث الدقيقة هذه ، يمكن العثور على أنماط مختلفة – على سبيل المثال ، عند البحث عن “كتب علمية للأطفال” ، يتم شراء السير الذاتية للعلماء بمعدل أعلى حتى عندما يتم تصنيفهم في مرتبة أقل. بمرور الوقت ، ومع زيادة كميات البيانات ، يمكننا معرفة ترتيب مدى الصلة بالموضوع من هذه السجلات. يمكننا استخدام أداة مثل Elasticsearch Learning to Rank لتعلم هذه المعلومات وتحسين صلة البحث. بمرور الوقت ، يمكن أيضًا دمج تقنيات أكثر تقدمًا مثل التضمينات العصبية في تحليل استعلام البحث .

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

هناك نقطة أخرى يجب مراعاتها في هذه الرحلة لبناء محرك بحث متقدم وهي مدى أهمية الحفاظ على التحكم الكامل في النظام والبيانات. إذا لم يكن محرك البحث هذا جزءًا أساسيًا من عرضك وكانت المؤسسة مرتاحة لمشاركة البيانات ، فإن العديد من هذه الميزات تأتي أيضًا كخدمة مُدارة. تشمل خدمات محركات البحث المُدارة هذه Algolia و Swiftype .

ختاماً 

، نأمل أن تكون هذه المقدمة القصيرة قد أعطتك نظرة عامة على كيفية البدء في تطوير محركات بحث مخصصة تتضمن بيانات نصية والمكان الذي قد تلعب فيه تقنيات معالجة اللغة الطبيعية التي تعلمتها حتى الآن دورًا. لمزيد من التفاصيل حول تنفيذ محركات البحث باستخدام Elasticsearch ، فقد يفيدك هذا الكتاب .

إضافة تعليق