ruby on rails - Thinking Sphinx - nested association with boolean field -


मेरे पास Rails 4 पर रूबी परियोजना सोच 3. स्फिंक्स 3 के साथ है। मेरे पास कुछ मॉडल हैं:

  वर्ग निवेश & lt; ActiveRecord :: बेस है_माइंड: निवेश इक्विटी एंड क्लास इनवेस्टमेंट पार्ट & lt; ActiveRecord :: बेस is_many: निवेश है_माया: चेक_आर्डर, आश्रित:: नष्ट है has_many: legal_entity_insurance_companies, के माध्यम से:: चेक_आर्डर, क्लास_नाम: "कानूनी एंटिटी :: बीमा कम्पनी" एंड क्लास चेकऑर्डर & lt; ActiveRecord :: बेस के लिए संबंधित: legal_entity_insurance_company, class_name: "LegalEntities :: InsuranceCompany" belongs_to: investment_part end   

मुझे CheckOrders द्वारा निवेशक खोजना होगा, जिनके पास बूलियन फ़ील्ड हैं स्वीकृत <पूर्व> create_table "check_orders", बल: सच do | t | ... t.boolean "स्वीकृत", डिफ़ॉल्ट: झूठे अंत

इसलिए मैंने कोशिश की:

  ThinkingSphinx :: Index.define: निवेश, के साथ :: सक्रिय_रेकॉर्ड करें इंडेक्स इनवेस्टमेंट_परेट्स.चेक_आर्डर। स्वीकृत, जैसा कि:: विवरणीकृत निवेश के अंत   

लेकिन खोज कुछ भी नहीं खोज:

  2.0.0p353: 008 & gt; CheckOrder.pluck (: स्वीकृत) (0.6ms) चुनें "चेक_ऑर्डर"। "स्वीकार्य" से "चेक_आर्डर" = & gt; [सच, सच, सच] 2.0.0p353: 009 & gt; निवेश। खोज ("", शर्तों: {बीमाकृत निवेश: सच}) स्पिंक्स पुनः प्रयास करने वाला प्रश्न "SELECT * FROM` निवेश_कोर 'कहां मैच (' @ बीमाकृत निवेश) 'और `स्पिंक्स_डेटेड` = 0 सीमित 0, 20 विकल्प अधिकतम_मैचें = 50000; दिखाएं मेटा "त्रुटि के बाद: क्वेरी के दौरान MySQL सर्वर से खो गया कनेक्शन स्पिंक्स क्वेरी (3.5ms) SELECT * FROM` investment_core` जहां मिलान ('@ बीमाकृत निवेश)' और `sphinx_deleted` = 0 LIMIT 0, 20 विकल्प max_matches = 50000 स्फिंक्स मिला 0 परिणाम = & gt; []   

इसलिए मैंने एट्रिब्यूट फिल्टर की कोशिश करने का निर्णय लिया:

  सोच- sphinx :: index.define: निवेश, के साथ:: active_record में निवेश_पार्टी है। चेक_र्डर स्वीकृत, जैसा कि:: insuranced_investment_attr end   

लेकिन यह त्रुटि उत्पन्न करता है:

  $ rake ts: rebuild Stopd searchd daemon (pid: 15516)। प्रोजेक्ट / कॉन्फ़िगर / मेरी- प्रोजेक्ट / कॉन्फ़िगर / डेवलपमेंट.sphinx.conf स्फिंक्स 2.1.4-रिलीज (रिलायंस 21-आर 4421) ... को विन्यास फ़ाइल '/ प्रोजेक्ट्स / माइ-प्रोजेक्ट / कॉन्फ़िगर / विकास' sphinx.conf ' ... ... इंडेक्सिंग इंडेक्स 'इन्व्हेस्टमेंट_कोर' ... त्रुटि: स्रोत 'investment_core_0': sql_attr_multi में अपेक्षित एट्रि प्रकार ('यूआईटी' या 'टाइमस्टैम्प' या 'बिल्टीन्ट'), 'फ़ील्ड से' बुल बीमाकृत निवेश निवेश '' मिला है। त्रुटि: सूचकांक 'investment_core': कुछ स्रोतों को कॉन्फ़िगर करने में विफल रहा है, यह सूचकांक नहीं होगा ... कुल 15 पढ़े, 0.000 सेकंड, 0.7 केबी / कॉल औसत, 0.0 मिसे / कॉल औसत कुल 50 लिखता है, 0.000 सेकंड, 0.5 केबी / कॉल औसत, 0.0 मिसे / कॉल औसत सफलतापूर्वक खोज की गई सफलतापूर्वक (पाइडर: 15556)।   

मैं इसे कैसे तय कर सकता हूं?

दाइकु सही है गुण आपकी आवश्यकताओं को बेहतर करने जा रहे हैं, लेकिन तथ्य यह है कि स्फिंक्स प्रकार के बूलियन के बहु-मूल्य विशेषताओं को नहीं संभाल सकता।

इस प्रकार, काम के कुछ हिस्से की ज़रूरत होती है - आप यह सुनिश्चित करना चाहते हैं कि check_orders में शामिल होने के लिए शामिल किया गया है, और फिर आप एक एसक्यूएल स्निपेट को बुलियन को परिवर्तित करने के लिए पूर्णांकों (सच 1, गलत है 0) करना चाहते हैं। मुझे लगता है कि निम्नलिखित को चाल करना चाहिए (आपके द्वारा उपयोग किए जा रहे डेटाबेस के लिए विकल्प चुनें):

  join_parts.check_orders # पोस्टग्रेएसक्यूएल के लिए: में "array_to_string (array_agg (DISTINCT (सीएएस चेक_ॉर्डर्स MySQL के लिए: # पूर्णांक, बहु: सच #: "GROUP_CONCAT" ("सीएसई चेक_आर्डर। स्वीकृत किया गया है, तब 1 ELSE 0 END") SEPARATOR ' , ') ", जैसा:: insuranced_investment_attr, प्रकार:: पूर्णांक, बहु: सच    

Comments

Popular posts from this blog

asp.net - Procedure or function "Procedure name" expects a parameter "Param name" which was not supplied occurs rarely -

c# - The item with identity 'Id' already exists in the metadata collection. Parameter name: item -

c++ - Redefined variable in the other module -