محلل البحث في نص PostgreSQL باستخدام تحليل حدود وحدة العناية المركزة
المرحلة الأولى من البحث عن النص الكامل هي التحليل - كسر نصوص المستندات والاستعلام في الرموز الفردية (كلمات مميزة ، أرقام ، إلخ). ومع ذلك ، هناك لغات لا تكون فيها هذه المهمة تافهة للغاية. المثال الأبرز هو لغات شرق آسيا (مثل الصينية واليابانية والكورية والمزيد) - حيث لا يتم فصل الكلمات عادة عن طريق المسافة البيضاء وعلامات الترقيم. مثال آخر هو العبرية. على الرغم من أن الكلمات مفصولة بترقيم الترقيم ، فقد تعتبر بعض الشخصيات علامات علامات ترقيم أو لا تعتمد على السياق.
يوفر المحلل الافتراضي المتضمن في النظام الفرعي للبحث عن النص الكامل لـ PostgreSQL نتائج غير مرضية إلى حد ما في هذه الحالات. pg_icu_parser هو امتداد يوفر تنفيذ محلل بحث كامل عن النص الذي يستخدم إجراءات تحليل حدود كلمة وحدة العناية المركزة لاستخراج الرموز من نص المصدر. تنفذ هذه الخوارزميات المحددة في الملحق 29 من معيار Unicode ، ويمكن أن توفر نتائج معقولة عبر العديد من اللغات.
حاليًا يجب بناء pg_icu_parser من رمز المصدر. تأكد من أن لديك ملفات دعم التطوير (الرؤوس وما إلى ذلك) لتوفير postgreSQL.
للبناء والتثبيت ، قم بتشغيل:
$ make install
سيؤدي ذلك إلى بناء وتثبيت في تثبيت postgresql المحدد من خلال المثال الأول من pg_config الموجود في المسار الحالي. لاستهداف تثبيت محدد (أو غير في المسار):
$ make install PG_CONFIG=/path/to/pg_config
الامتداد متاح أيضا في PGXN.
لتحميل الامتداد إلى قاعدة بيانات ، قم بتنفيذ أمر SQL التالي كمستخدم مع أذونات مناسبة:
CREATE EXTENSION pg_icu_parser;سيؤدي ذلك إلى تسجيل محلل النص المخصص في المخطط الحالي. للاستفادة منه ، يجب إنشاء تكوين البحث عن النص كما هو موضح في دليل PostgreSQL. على سبيل المثال:
CREATE TEXT SEARCH CONFIGURATION sample (parser = icu_parser);
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR word WITH english_stem;
ALTER TEXT SEARCH CONFIGURATION sample ADD MAPPING FOR number , ideo, kana WITH simple; أنواع الرمز المميز الذي يمكن أن ينبعث من قبل المحلل هي word ، number ، kana ، ideo و blank - هذه تتماشى مع علامات Break Word التي تدعمها وحدة العناية المركزة. لا توجد قيود على القواميس التي يمكن استخدامها.
pg_icu_parser يعرض معلمة تكوين واحدة:
pg_icu_parser.locale - سلسلة ، اختياري. لغة وحدة العناية المركزة لاستخدامها مع إجراءات تحليل الحدود. إذا لم يتم تعيينه ، فإن الافتراضات إلى en . عادةً لا توجد حاجة إلى تعيين هذه المعلمة ، حيث لا توجد قواعد اكتشاف حدود كلمة حساسة للمحطة. كما هو موضح أعلاه ، فإن القوة الرئيسية لـ pg_icu_parser مقابل المحلل default المدمج بالفعل في PostgreSQL هي نتائج الرمز المميز الأفضل عبر لغات مختلفة. بالإضافة إلى ذلك ، لا يعتمد pg_icu_parser على إعداد لغة قاعدة البيانات أو نظام التشغيل الأساسي لتحديد خطاب.
ومع ذلك ، هناك العديد من المفاضلات التي يجب أن تكون على دراية بها يمكن أن تؤثر على قرار ما إذا كان pg_icu_parser مناسبًا لحالة الاستخدام المعينة:
يمكن أن يتعرف المحلل الافتراضي على مجموعة واسعة من الأنماط كأنقام ، بما في ذلك عناوين URL ، وعناوين pg_icu_parser الإلكتروني ، وأنواع مختلفة من القيم الرقمية ، وما إلى ذلك.
في الوقت الحالي ، لا يدعم pg_icu_parser وظيفة ts_headline . ربما في المستقبل ...
pg_icu_parser أبطأ بكثير من المحلل default . ومع ذلك ، إذا كان ترميز الخادم لقاعدة البيانات هو UTF-8 ، فسيتم استخدام مسار سريع ، مما يقلل من النفقات العامة. انظر القسم القياسي أدناه.
كملحق طرف ثالث ، لا يمكن استخدام pg_icu_parser إلا حيث يتوفر التحكم الكامل في تثبيت PostgreSQL ؛ أي أنه ربما لا يمكن استخدامه مع حلول PostgreSQL المدارة.
يمكن أن يعطي المعيار التالي غير العلمي شعوراً بمقدار التباطؤ الذي قد يتوقعه المرء من استخدام pg_icu_parser بدلاً من المحلل الافتراضي. السيناريو الذي تم اختباره هو استعلام لحساب عدد الرموز غير المبرمة في كل وثيقة في مجموعة. Corpus المستخدم هو Haaretz Corpus ، التي تتكون من 27139 مقالات اللغة العبرية القصيرة. القيم هي متوسط وقت التنفيذ بالمللي ثانية من 10 جولات ، كما ذكرت من خلال EXPLAIN ANALYZE :
| ترميز الخادم | default | pg_icu_parser | ابطئ |
|---|---|---|---|
| UTF-8 | 2،566.9974 | 2،884.3696 | -12.3 ٪ |
| ISO-8859-8 | 3529.6487 | 5،059.3616 | -43.3 ٪ |
بالطبع قد يكون للبيئات المختلفة والشركات المختلفة نتائج مختلفة ، YMMV.
pg_icu_parser مرخصة بموجب ترخيص Mozilla Public 2.0.