سؤال

أنا أستخدم أبو الهول مع البرنامج المساعد Sphinx التفكير. لقد فهرست نموذجا يسمى المكان مع التعليمات البرمجية التالية (و Cake Thank_Sphinx: أمر الفهرس)

define_index do
    indexes :name
    indexes city
    indexes zip
end

أحصل على النتائج في جهاز التحكم الخاص بي مع هذا الرمز:

@venues = Venue.search params[:search]

وتقديمهم ك json. المشكلة التي لدي هي أنه عندما أضرب عنوان URL هذا:

http://localhost:3000/venue/list?search=Baltimo

أنا لا أحصل على شيء. ولكن عندما تضغط على عنوان URL هذا:

http://localhost:3000/venue/list?search=Baltimor

أحصل على جميع الأماكن الموجودة في مدينة بالتيمور. لسبب ما أن حرف واحد يحدث فرقا. من الناحية النظرية، يجب أن أحصل على جميع الأماكن في بالتيمور إذا كنت مجرد البحث بحرف واحد - 'B'

لا أحد يعرف ما الذي يجري هنا؟

شكرا لك

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

المحلول

إلا إذا كان لديك enable_star تعيين إلى 1 و min_prefix_len أو min_infix_len اضبط على 1 أو أكثر، فلن تحصل على B لتتناسب مع بالتيمور (وحتى بعد ذلك، أعتقد أنك بحاجة إلى البحث عن B * للحصول على المباراة).

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

إذا كنت ترغب في الحصول على أي جزء من أي كلمة مطابقة، فأنت بحاجة إلى وضع شيء مثل ما يلي في التكوين / sphinx.yml:

development:
  enable_star: 1
  min_infix_len: 1
test:
  enable_star: 1
  min_infix_len: 1
production
  enable_star: 1
  min_infix_len: 1

ثم توقف SPHINX، إعادة فهرس، وإعادة تشغيل أبو الهول. بمجرد القيام بذلك، يجب إرجاع البحث عن B Baltimore.

أتمنى أن يساعدك هذا.

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