سؤال

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

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

المحلول

وإنشاء <م> اثنين الجداول.

واحد يحتوي على كل شيء عن المدينة.

واحد يحتوي على مجموعة من أسماء المدن، وجمعية المفتاح الخارجي تلك NAES مع معرف من الجدول الأول. بحيث يكون لديك واحد للعديد من العلاقة بين المدينة وcity_names.

والآن المشكلة الوحيدة هو التمييز بين اسم واحد، ولكل مدينة، وهذا هو الاسم المفضل. يمكننا أن نفعل ذلك عدة طرق: 1) الجدول الأول يمكن أن يكون له FK إلى الجدول الثاني، الذي يحمل لمعرف الاسم المفضل. وهذا يخلق تبعية دائرية، وإن كان. لذلك أفضل، 2) فقط إضافة عمود منطقية / قليلا إلى الجدول الثاني، is_preffered.

create table city (id not null primary key, other columns ) ;

create table city_name (
 id not null primary key, 
 city_id int references city(id), 
 name varchar(80),
 is_preferred bool  
) ;

وبعد ذلك للحصول على كل الأسماء، مع اسم المفضل أولا:

   select name from city_names where city_id = ? 
   order by is_preffered desc, name;

وهذا له ميزة إضافية: إذا كنت لا تغطي كل مدينة وبلدة، يمكنك استخدام الجدول الثاني لخريطة المدن / القرى / المقاطعات التي لا تغطي إلى المدن الرئيسية تفعله:

 insert into city_name(city_id, name) values
 ( $id-for-New-York-City, 'New York'),
 ( $id-for-New-York-City, 'Manhattan'),
 ( $id-for-New-York-City, 'Big Apple'),
 ( $id-for-New-York-City, 'Brooklyn');

نصائح أخرى

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

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

وحتى في قضيتك في الجدول shorthand-to-normal سيتعين علينا

 ______________
| short|normal |
|______|_______|
|St    |Saint  |
|St.   |Saint  |

وقد ترغب في النظر في محرك كامل المواصفات المزيد من نص كامل البحث مثل أباتشي لوسين / المؤسسة العامة أو أبو الهول - التي يمكن أن تدعم هذا النوع من الخرائط سلسلة أصلا

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

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

وأما نهج عام، يمكنك تطبيع البنود سواء عند إدخال وعند تفتيشها.

وقواعد التطبيع يمكن أن يكون:

Saint => St
St. => St

وغيرها.

يجب أن أسماء تطبيع ثم المباراة.

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

وأنا أحب الخيار في الجواب الأول.

والفكر الآخر سيكون لديك عمود للعلامات لتلك المدينة هذا التحديث المستخدمين كودل.

وأي بمعنى.

ومدينة نيويورك هو الاسم الرسمي.

الكلمات الدلالية لهذه المدينة ستكون معدود (مانهاتن، نيويورك، نيويورك، المدينة، التفاحة الكبيرة ..) e.t.c. ولكن كنت لا تريد كل ذلك غير المرغوب فيه في جدول المدن الرئيسية أو لإنشاء الجداول التابعة assicated وعليك القيام به صلات. حتى مجرد الثنية في والأعمدة وبحث عنها على أساس مصطلح البحث ولكن بعد ذلك يعود الاسم الصحيح إذا وجدت ذلك.

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

ولست متأكدا من إصدار SQL الذي تستخدمه ليصل إلى differant بين 2005/8 حتى لا يكون هناك مدخل جيد ل2005/8 هنا <لأ href = "http://arcanecode.com/2008/05/28/creating ، مخصص-المكنز-إدخالات في SQL خادم عام 2005 و-2008-كامل النص بحث / "يختلط =" نوفولو noreferrer "> http://arcanecode.com/2008/05/28/creating-custom -thesaurus-إدخالات في SQL خادم عام 2005 و-2008-كامل النص بحث /

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