इलास्टिक से समस्या का समाधान नहीं हो सका।

दिया गया:

  1. रंगों के साथ सूची: var colors_to_filter = ["red", "blue", "black"];
  2. इलास्टिक्स खोज में फ़ील्ड रंग: colors: ["green", "red", "black"]

कार्य:

रंगों के साथ इलास्टिक्स खोज से सभी उत्पाद प्राप्त करें जिन्हें colors_to_filter सूची में परिभाषित किया गया है। यदि colors_to_filter में से कोई भी रंग इलास्टिक्स खोज colors फ़ील्ड में मौजूद है, तो इस उत्पाद को वापस कर दें।

मेरा वर्तमान कोड जो काम नहीं कर रहा है: (इस लाइन पर एक नज़र डालें):
.Bool(bl => bl.Filter(fl => fl.Terms( tr => tr.Field(fs => fs.Sizes.Suffix("keyword")).Terms(sizesList))

  .Aggregations(a => a.Terms(sizesAggName, tt => tt.Field(o => o.Sizes.Suffix("keyword")))
                                .Max(priceAggNameMax, st => st.Field(o => o.SalePrice)))
  .TrackTotalHits()
  .Sort(p => GetSortType(sortType))
  .Index(GetIndexName())
  .From(from)
  .Size(size)
  .Query(q => q.Bool(b => GetQuery(mainCategory, subCategory, subSubcategory, term)))
  .PostFilter( ppf => ppf
  .Bool(bl => bl.Filter(fl => fl.Terms( tr => tr.Field(fs => fs.Sizes.Suffix("keyword")).Terms(sizesList))
  && ppf.Range(r => {
               r = r.Field(f => f.SalePrice);
               if (minPrice > 0) r = r.GreaterThanOrEquals((double)minPrice);
               if (maxPrice > 0) r = r.LessThanOrEquals((double)maxPrice);
               return r;
  })))));

0
Shilovskoye Moloko 8 फरवरी 2020, 15:03
जब आप कहते हैं कि यह काम नहीं कर रहा है, तो आपका मतलब है कि लौटाए गए दस्तावेज़ सही तरीके से फ़िल्टर नहीं किए गए हैं?
 – 
Rob
9 फरवरी 2020, 00:25
आप सही हैं, इसे सही ढंग से फ़िल्टर नहीं किया गया था
 – 
Shilovskoye Moloko
9 फरवरी 2020, 11:03

2 जवाब

मुझे इलास्टिक्स खोज के बारे में कोई जानकारी नहीं है। हालांकि आवश्यकताएं स्पष्ट लगती हैं:

पहला फ़िल्टर जिसमें तत्व रंग colors_to_filter में हैं। फिर उस परिणाम को फिर से फ़िल्टर करें जो colors में भी रंग हैं। केवल वे चीज़ें जो दोनों फ़िल्टरिंग से बच जाती हैं, अंतिम परिणाम में होती हैं।

उन दो सूचियों को उन सभी रंगों के साथ एक में काटने के लिए एक अनुकूलन होगा जो दोनों में हैं (जो "लाल" और "काला" होगा)। फिर उस अमलगम सरणी को फ़िल्टर के रूप में उपयोग करें। मुझे यकीन नहीं है कि यह फिर से किस तरह का जुड़ाव था।

मैं अनुमान कर रहा हूँ इलास्टिसर्च को उस अनुकूलन को स्वचालित रूप से करना है और यह आपको यह दिखाने के लिए एक उदाहरण है? प्रदर्शन के लिए दो समान फ़िल्टरों का सटीक क्रम या यहां तक ​​कि एक प्रारंभिक जुड़ाव? यही एकमात्र चीज है जिसे मैं किसी भी खोज/फ़िल्टरिंग के साथ "लोचदार" होने के बारे में सोच सकता था।

0
Christopher 8 फरवरी 2020, 15:12
लोचदार नेस्ट के बिना इस मुद्दे को कैसे हल किया जाए, यह बहुत स्पष्ट है, कोई समस्या नहीं है। यह विशिष्ट इलास्टिक्स खोज प्रश्न है। वैसे भी उत्तर के लिए धन्यवाद
 – 
Shilovskoye Moloko
8 फरवरी 2020, 15:15
बहुत सी . से चेन कॉल वाली सिंगल लाइन हमेशा डिबग करने के लिए एक बहुत बड़ा दर्द होता है। मेरी सलाह है कि उन्हें कभी भी न लिखें, क्योंकि उन्हें बनाने के लिए केवल "कीमत" है, उन्हें डिबग करते समय हेक मिल रहा है। मैं प्रति पंक्ति कम से कम 1 ऑपरेशन की सलाह देता हूं, जो एक अस्थायी चर को सौंपा गया है। कंपाइलर रिलीज़ बिल्ड में किसी भी अप्रयुक्त अस्थायी चर को काट देगा, लेकिन डिबगिंग के लिए वे उनकी मेमोरी फ़ुटप्रिंट के लायक हैं | हालांकि मुझे यकीन नहीं है कि वह तकनीक LINQ के लिए काम करती है। या LINQ समकक्ष। मुझे लगता है कि मूल्यांकन को तब तक के लिए टाल दिया गया जब तक कि वास्तव में परिणाम का उपयोग नहीं किया जाता है?
 – 
Christopher
8 फरवरी 2020, 15:19

कार्य कोड:

.Aggregations(a => a.Terms(sizesAggName, tt => tt.Field(o => o.Sizes.Suffix("keyword")))
                                .Max(priceAggNameMax, st => st.Field(o => o.SalePrice)))
  .TrackTotalHits()
  .Sort(p => GetSortType(sortType))
  .Index(GetIndexName())
  .From(from)
  .Size(size)
  .Query(q => q.Bool(b => GetQuery(mainCategory, subCategory, subSubcategory, term)))
  .PostFilter( ppf => ppf
  .Terms(tr =>
         {
             var tt = tr.Field(fs => fs.Sizes.Suffix("keyword"));
             return sizesList.Lenght() > 0 ? tt.Terms(selectedSizes) : tt;
         })
  && ppf.Range(r => {
             r = r.Field(f => f.SalePrice);
             if (minPrice > 0) r = r.GreaterThanOrEquals((double)minPrice);
             if (maxPrice > 0) r = r.LessThanOrEquals((double)maxPrice);
             return r;
  })));
0
Shilovskoye Moloko 9 फरवरी 2020, 00:32