मैं इतनी तरह मेरे 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 साथ इस लक्ष्य को हासिल करते हैं?
क्या आप इसे रेगेक्स/स्ट्रिंग मैनिपुलेशन के साथ नियंत्रक में नहीं कर सकते हैं? उदाहरण के लिए बस जांचें कि 'स्वामी:' पैराम्स [: खोज] के हिस्से के रूप में मौजूद है, और फिर बस कुछ सशर्त तर्क का उपयोग करें? –
@ ओलिवरएम जो दिलचस्प लगता है। क्या आप मुझे एक कोड उदाहरण दिखा सकते हैं। धन्यवाद! – marcamillion
हालांकि यह दिलचस्प लगता है, लेकिन मुझे सच में संदेह है कि यह प्रदर्शन को प्रभावित करेगा ... (इस धारणा के तहत कि आपके द्वारा खोजे जाने वाले सभी कॉलम ठीक से अनुक्रमित हैं)। मुझे पता है कि आपने प्रदर्शन के बारे में कुछ भी उल्लेख नहीं किया है और आपको केवल परिणामों को फ़िल्टर करने के लिए इसकी सबसे अच्छी आवश्यकता है ... –