2015-05-26 12 views
10

मैं इतनी तरह मेरे Node मॉडल पर PgSearch को लागू किया है:मैं pg_search के साथ ऑपरेटरों के साथ उन्नत खोज कैसे कार्यान्वित करूं?

include PgSearch 
pg_search_scope :node_search, against: [:name, :user_id, :circa], 
    using: { tsearch: { any_word: true} }, 
    :associated_against => { 
     comments: [:message], 
     user: [:first_name, :last_name, :email], 
     memberships: [:relation] 
    } 

और मेरे नियंत्रक में मैं इस है:

if params[:search] 
    @nodes = Node.node_search(params[:search]) 
end 

आदर्श रूप में, मैं हालांकि ऐसा करने में सक्षम होना चाहते हैं क्या, है कोई भी एसोसिएशन में से किसी एक के टेक्स्ट प्रस्तुति (ध्वज) में टाइप करने में सक्षम हो सकता है और केवल उस ध्वज पर खोज फ़िल्टर रख सकता है।

उदा। कहें: "नाम: बाउंसिंग बॉल", जहां खोज nodes मॉडल पर name नामक कॉलम पर होगी। उर्फ ... यह Bouncing Ball नाम के साथ सभी नोड्स की तलाश करेगा और अन्य कॉलम या मॉडल या यहां तक ​​कि किसी भी संगठन की खोज नहीं करेगा।

स्वाभाविक रूप से, मैं की तरह खोज करने के लिए सक्षम होने के लिए करना चाहते हैं: owner: John Brown, (जो सभी नोड्स जिसके मालिक/उपयोगकर्ता first_name और last_name जॉन ब्राउन कर रहे हैं के लिए खोज करता) comment: Manhattan (जो सभी नोड्स के साथ एक टिप्पणी है कि के लिए खोज करता पाठ Manhattan नकल में, और इतने पर।

मैं कैसे PgSearch साथ इस लक्ष्य को हासिल करते हैं?

+0

क्या आप इसे रेगेक्स/स्ट्रिंग मैनिपुलेशन के साथ नियंत्रक में नहीं कर सकते हैं? उदाहरण के लिए बस जांचें कि 'स्वामी:' पैराम्स [: खोज] के हिस्से के रूप में मौजूद है, और फिर बस कुछ सशर्त तर्क का उपयोग करें? –

+0

@ ओलिवरएम जो दिलचस्प लगता है। क्या आप मुझे एक कोड उदाहरण दिखा सकते हैं। धन्यवाद! – marcamillion

+0

हालांकि यह दिलचस्प लगता है, लेकिन मुझे सच में संदेह है कि यह प्रदर्शन को प्रभावित करेगा ... (इस धारणा के तहत कि आपके द्वारा खोजे जाने वाले सभी कॉलम ठीक से अनुक्रमित हैं)। मुझे पता है कि आपने प्रदर्शन के बारे में कुछ भी उल्लेख नहीं किया है और आपको केवल परिणामों को फ़िल्टर करने के लिए इसकी सबसे अच्छी आवश्यकता है ... –

उत्तर

4

आप खोज स्ट्रिंग के कुछ नियंत्रक प्रसंस्करण के साथ "Dynamic search scopes" का एक संयोजन का उपयोग करने की कोशिश की है?

name: Bob, कॉलम/रिश्ते और खोज मूल्य को पार्स करें, फिर इसे एक lg_search_scope पर लैम्ब्डा ब्लॉक के साथ पास करें?

+0

क्या आप मुझे कुछ उदाहरण कोड दिखा सकते हैं, क्योंकि मैं इसे काफी परेशान नहीं कर सकता। – marcamillion

संबंधित मुद्दे