سؤال

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

لذا, فعلى سبيل المثال, دعونا نقول لديك كائن الفيلم و تريد السماح للمستخدم البحث عن الكلمات الرئيسية في عنوان المقالة ، ثم كنا مؤشر كل عنوان مؤامرة العمود ثم تفعل شيئا مثل:

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)

(هو في الواقع قليلا أكثر تقدما من ذلك, ولكن لا شيء معقدة بشكل رهيب)

بعض المستخدمين إضافة أرقام إلى البحث في ذلك على سبيل المثال أنها تريد أن تجد 'المنهي 2'.المشكلة هنا هي أنه بقدر ما أعرف ، بشكل افتراضي SQL Server لن فهرس الكلمات القصيرة ، وبالتالي القيام بعملية بحث من هذا القبيل:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')

هو في الواقع ما يعادل القيام بذلك:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'

ونحن الحصول على مجموعة كبيرة من نتائج زائفة.

هل هناك طريقة لإجبار SQL Server إلى مؤشر صغيرة الكلمات ؟ ويفضل أنا أفضل مؤشر فقط أرقام مثل 1, 2, 21, الخ.أنا لا أعرف من أين تعريف الفهرسة المعايير ، أو حتى إذا كان من الممكن أن تكون محددة قدر ذلك.


حسنا, لقد فعلت ذلك, إزالة "الضوضاء-عبارة" من القائمة ، والآن سلوك مختلف قليلا, ولكن لا يزال ليس ما كنت تتوقع.

البحث لن ل "المدمر 2" (أنا فقط جعل هذا صاحب العمل قد لا يكون سعيدا حقا إذا كان الكشف عن ما نقوم به...على أي حال, حيث تختلف قليلا ولكن المبدأ نفسه) ، أنا لا أفهم أي شيء, ولكن أعرف أن هناك كائنات تحتوي على كلمتين.

ربما أفعل شيء خاطئ ؟ أنا إزالة جميع الأرقام من 1 ...9 من الضوضاء تكوين المهندس ENU و NEU (محايد) ، إعادة إنشاء الفهارس ، وحاول البحث.

هل كانت مفيدة؟

المحلول

هذه "الكلمات الصغيرة" تعتبر "كلمات الضجيج" من فهرس النص الكامل.يمكنك تخصيص قائمة كلمات الضجيج.هذا بلوق وظيفة يوفر المزيد من التفاصيل.تحتاج إلى إعادة كامل فهرس النص عند تغيير كلمات الضجيج الملف.

نصائح أخرى

كنت أعرف عن ضجيج الكلمات الملف, ولكن أنا لا لماذا "المدمر 2" على سبيل المثال لا تزال تعطي لك مشاكل.قد ترغب في محاولة طرح هذا على MSDN مشغل قاعدة بيانات المنتدى أين الناس التي تتخصص في هذا النوع من الشيء شنق.

يمكنك الجمع بين يحتوي على (أو CONTAINSTABLE) مع بسيطة حيث شروط:

حدد * من الأفلام حيث يحتوي على(العنوان, '"المدمر 2"') and Title like '%منهي 2%'

في حين يحتوي على العثور على كل منهي حيث سيتم القضاء على 'فاصل 1'.

بالطبع المحرك هو ذكي بما فيه الكفاية لبدء مع لا تحتوي على مثل الشرط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top