سؤال

لقد قمت بتثبيت أبو الهول والتفكير-sphinx قبل بضعة أيام على Ruby on Rails 2.3.2 ، والبحث الأساسي يعمل بشكل رائع. هذا يعني ، دون أي شروط. الآن ، أريد تصفية البحث مع بعض الشروط.

لدي نموذج إعلان ، ويبدو الفهرس على النحو التالي:

  define_index do
    indexes title, :as => :title, :sortable => true
    indexes description, :as => :description, :sortable => true
  end

ربما أكون مخطئًا ، لكنني لاحظت ذلك فقط عندما أضفت :sortable => true بناء جملة لهذه السمات ، يمكنني استخدامها كظروف في بحثي. وإلا فلن يجد أي شيء.

الآن ، أنا أيضًا أستخدم البرنامج المساعد ACTS_AS_TAGGABLE_ON ، والذي أنشأ الجداول الخاصة بي DB: العلامات والعلامات. ليس لدي نموذج للعلامات ، لدي للتو acts_as_taggable_on :tags, :categories في نموذج إعلاناتي.

ما أود القيام به الآن هو تصفية العلامات. لذلك ، حاولت إضافة إلى الفهرس الخاص بي has tags(:id), :as => :tag_ids بدون حظ ، وكذلك indexes tags(:id), :as => :tag_ids لكنها لم تنجح أيضًا.

كيف يمكنني بناء الفهارس حتى أتمكن من فعل شيء مثل هذا:

Announcement.search 'some word', :conditions => {:tag_ids => some_id}

وأيضا ، وهو مختلف بين has و indexes

شكرا يا براين

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

المحلول

اسمحوا لي أن أجيب على أسئلتك في الاتجاه المعاكس. indexes whatever تتوقع سلسلة ، وهذا ما سيبحثه Sphinx عن النص الذي تقدمه.

على الجانب الآخر، has whatever لا يضيف هذا المحتوى إلى الحقول القابلة للبحث. إنه يتوقع أرقامًا في المقام الأول ، لأنك تستخدم هذه الأشياء للفرز والتصفية بعد أن قام Sphinx بالبحث بالفعل.

أخيرًا ، أعتقد أنك تريد has tags(:id), :as => :tag_ids في النموذج الخاص بك ، و :with => {:tag_ids => some_id} في بحثك بدلاً من الاستخدام :conditions. يتم استخدام الشروط في حقول النص التي قمت بفهرستها ، كوسيلة لإجراء عمليات البحث النصية في حقول محددة بدلاً من جميع الحقول المفهرسة. يستخدم لتصفية النتائج باستخدام السمات التي حددتها بها has whatever.

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