يتطابق قاموس المرادفات المتعدد في البحث عن النص الكامل لـ PostgreSQL
-
05-07-2019 - |
سؤال
أحاول إجراء بحث عن النص الكامل في PostgreSQL 8.3.لقد عملت بشكل رائع، لذلك أضفت مطابقة المرادفات (على سبيل المثال:'bob' == 'robert') باستخدام قاموس المرادفات.هذا يعمل بشكل رائع أيضًا.لكنني لاحظت أنه على ما يبدو يسمح فقط بكلمة واحدة واحد مرادف.وهذا يعني أن "al" لا يمكن أن يكون "ألبرت" و"ألين".
هل هذا صحيح؟هل هناك أي طريقة للحصول على مطابقات قاموس متعددة في قاموس مرادفات PostgreSQL؟
كمرجع، إليك نموذج ملف القاموس الخاص بي:
bob robert
bobby robert
al alan
al albert
al allen
وSQL الذي ينشئ تكوين البحث عن النص الكامل:
CREATE TEXT SEARCH DICTIONARY nickname (TEMPLATE = synonym, SYNONYMS = nickname);
CREATE TEXT SEARCH CONFIGURATION dxp_name (COPY = simple);
ALTER TEXT SEARCH CONFIGURATION dxp_name ALTER MAPPING FOR asciiword WITH nickname, simple;
ما الخطأ الذي افعله؟شكرًا!
المحلول
هذا قيد في كيفية عمل المرادفات.ما يمكنك فعله هو قلبه كما في:
bob robert
bobby robert
alan al
albert al
allen al
يجب أن يعطي نفس النتيجة النهائية، وهي أن البحث عن أي منهما سيطابق نفس الشيء.
نصائح أخرى
يجب أن يحدد القاموس علاقة وظيفية بين الكلمات والمعاجم وإلا فلن يعرف الكلمة التي يجب إرجاعها عند المعجم.في المثال الخاص بك، al
يعيّن ثلاث قيم مختلفة وبالتالي يحدد دالة متعددة القيم ولا تعرف وظيفة lexize ما يجب إرجاعه.كما يوضح ماغنوس، يمكنك التعجم من أسماء الأعلام alan, albert, allen
إلى اللقب al
.
ومع ذلك، تذكر أن الهدف من قاموس FTS ليس إجراء تحويلات في حد ذاته ولكن السماح بفهرسة فعالة للكلمات ذات الصلة لغويًا.وهذا يعني أن المعجم لا يحتاج إلى أن يشبه الإدخال الأصلي بأي معنى لغوي.على الرغم من أنك على حق في أنه من المستحيل تحديد علاقة متعدد إلى متعدد، هل تحتاج حقًا إلى ذلك؟على سبيل المثال، لحل مشكلتك vin
مثال:
vin vin
vincent vin
vincenzo vin
vinnie vin
ولكن يمكنك أيضًا القيام بذلك:
vin grob
vincent grob
vincenzo grob
vinnie grob
والحصول على نفس التأثير (على الرغم من أن سبب رغبتك في ذلك هو قصة أخرى).
وبالتالي، إذا كنت ستقوم بتحليل مستند يحتوي على 11 نسخة من اسم فنسنت، فإن to_tsvector
ستعود الوظيفة vin:11
في الحالة السابقة و grob:11
في الأخير.
في وثائق 8.4، يتحدث عن استبدال القاموس المرادف، ربما يكون ذلك مفيدًا؟
http://www.postgresql.org/docs/8.4/interactive/dict-xsyn.html