سؤال

أنا باستخدام أبو الهول مع التفكير الهول المساعد للبحث في البيانات.أنا باستخدام MySQL.

البيانات يحتوي على معلمة حرف ("á", "é", "ã") و التي أريد لها أن تكون أي ما يعادل غير معلمة نظرائهم ("a", "ه", "a", على سبيل المثال) عند البحث و الطلب.

حصلت على البحث عن عمل باستخدام charset الجدول (pastie.org/204316) ، و البحث عن "أغوا" العوائد "أجوا" ، ولكن ترتيب النتائج لا يعمل بشكل صحيح.في البحث عن "أغوا", "أجوا" جاء بعد "مويتا اغوه" ، على سبيل المثال ، ولكن أردت أن تكون مرتبة كما لو كانت مكتوبة مع "A" وليس "Á".

الحل الوحيد الذي أستطيع التفكير به هو مؤشر عمود جديد يحتوي على غير معلمة حرف و استخدامه sortering باستخدام محل (http://dev.mysql.com/doc/refman/5.4/en/string-functions.html#function_replace) الخلية وظيفة قطاع معلمة حرف, ولكن سوف تحتاج إلى استدعاء واحد إلى محل لكل من الممكن معلمة شار (وهناك العديد من) ويبدو لي لا maintanable الحل.

أحد يعرف أفضل طريقة للتعامل مع هذه المسألة ؟

وذلك بفضل!

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

المحلول

أبو الهول مقابض الفرز على حقول السلسلة من خلال تخزين كافة القيم في قائمة فرز القائمة ومن ثم تخزين مؤشر من كل سلسلة باعتباره الباحث السمة.وفقا مستندات الفرز من هذه القائمة يتم في بايت مستوى حاليا لا شكلي.

من الناحية المثالية السلاسل يجب أن تكون مرتبة بشكل مختلف اعتمادا على ترميز اللغة.فعلى سبيل المثال ، إذا السلاسل المعروف أن النص الروسي في KOI8R ترميز فرز بايت 0xE0, 0xE1 ، 0xE2 أن تنتج 0xE1, 0xE2 و 0xE0 ، لأنه في KOI8R قيمة 0xE0 ترميز الحرف الذي هو (ملحوظ) بعد الأحرف المشفرة بواسطة 0xE1 و 0xE2.للأسف الهول لا تدعم ذلك في هذه اللحظة و سوف ببساطة نوع السلاسل bytewise.

- من http://www.sphinxsearch.com/docs/current.html

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

# save an unaccented copy of your title. Normalise method borrowed from
# http://stackoverflow.com/questions/522715/removing-accents-diacritics-from-string-while-preserving-other-special-chars-tri
class MyModel < ActiveRecord::Base
  before_validation :update_sort_col

  private

  def update_sort_col
    sort_col = self.title.to_s.mb_chars.normalize(:kd).gsub(/[^-x00-\x7F]/n, '').to_s
  end
end

نصائح أخرى

ويمكنك أيضا استخدام فهرس خاص لأنك لا تحتاج إلى عمود جديد على ديسيبل الخاص بك حتى

indexes "LOWER(title)", :as => :title,  :sortable => true

ومزود الخام لها حتى تتمكن من استدعاء الطبيب استبدال الأسلوب.

وفقط بناء مؤشر على نسخة بأحرف صغيرة مع بناء الجملة التالي. لها حل بسيط جدا وأنيقة للبحث case insensitive باستخدام Sphinx.

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