मैंने उत्पाद मूल्य सीमाओं के लिए समझदार गतिशील पहलुओं की गणना करने के तरीके का काम किया है। समाधान में दस्तावेज़ों के कुछ पूर्व प्रसंस्करण और क्वेरी परिणामों के कुछ पोस्ट-प्रोसेसिंग शामिल हैं, लेकिन इसे सोलर को केवल एक प्रश्न की आवश्यकता है, और 1.4 जैसे सौर के पुराने संस्करण पर भी काम करना चाहिए।
दौर ऊपर प्रस्तुत करने से पहले कीमतों
पहले, दस्तावेज़ प्रस्तुत करने से पहले, एक "rounded_price" क्षेत्र में दौर अप निकटतम "अच्छा दौर पहलू सीमा" के लिए कीमत और यह दुकान। उपयोगकर्ता अपने पहलुओं को "250-500" की तरह दिखने के लिए "247-483" नहीं दिखते हैं, और राउंडिंग का भी अर्थ है कि आप सैकड़ों मूल्य पहलुओं को वापस पा सकते हैं जिनमें से लाखों लोग नहीं हैं।, ..., 24,25,30,35, ..., 95.100.110
public static decimal RoundPrice(decimal price)
{
if (price < 25)
return Math.Ceiling(price);
else if (price < 100)
return Math.Ceiling(price/5) * 5;
else if (price < 250)
return Math.Ceiling(price/10) * 10;
else if (price < 1000)
return Math.Ceiling(price/25) * 25;
else if (price < 2500)
return Math.Ceiling(price/100) * 100;
else if (price < 10000)
return Math.Ceiling(price/250) * 250;
else if (price < 25000)
return Math.Ceiling(price/1000) * 1000;
else if (price < 100000)
return Math.Ceiling(price/2500) * 2500;
else
return Math.Ceiling(price/5000) * 5000;
}
अनुमत कीमतों 1,2,3 जाना: कुछ प्रयास के साथ निम्नलिखित कोड किसी भी कीमत पैमाने पर अच्छी तरह से पूर्णांक बनाना सामान्यीकृत किया जा सकता , ..., 240,250,275,300,325, ..., 975,1000 और बहुत आगे। facet.field=rounded_price
:
गोल कीमतों
दूसरा, जब क्वेरी प्रस्तुत करने, मूल्य के अनुसार क्रमबद्ध गोल की कीमतों पर सभी पहलुओं का अनुरोध पर सभी पहलुओं प्राप्त करें। गोल करने के लिए धन्यवाद, आपको कुछ सौ पहलू वापस मिलेंगे।
बड़ा पहलुओं
तीसरा में आसन्न पहलुओं कम्बाइन, आप परिणाम के बाद, उपयोगकर्ता केवल 3 से 7 पहलुओं, नहीं पहलुओं के सैकड़ों देखना चाहता है। तो, प्रत्येक खंड में लगभग बराबर संख्या में दस्तावेज़ प्राप्त करने की कोशिश कर रहे कुछ बड़े पहलुओं (जिसे "सेगमेंट" कहा जाता है) में आसन्न पहलुओं को गठबंधन करें। निम्न बल्कि जटिल कोड यह करता है, रेंज क्वेरी करने के लिए उपयुक्त (प्रारंभ, अंत, गिनती) के tuples लौट रहा है। मायने रखता है लौटे सही प्रदान किए गए मूल्यों हो जाएगा ऊपरगोल कर दिया गया निकटतम सीमा तक: चयनित पहलू
चौथा, मान लीजिए द्वारा
public static List<Tuple<string, string, int>> CombinePriceFacets(int nSegments, ICollection<KeyValuePair<string, int>> prices)
{
var ranges = new List<Tuple<string, string, int>>();
int productCount = prices.Sum(p => p.Value);
int productsRemaining = productCount;
if (nSegments < 2)
return ranges;
int segmentSize = productCount/nSegments;
string start = "*";
string end = "0";
int count = 0;
int totalCount = 0;
int segmentIdx = 1;
foreach (KeyValuePair<string, int> price in prices)
{
end = price.Key;
count += price.Value;
totalCount += price.Value;
productsRemaining -= price.Value;
if (totalCount >= segmentSize * segmentIdx)
{
ranges.Add(new Tuple<string, string, int>(start, end, count));
start = end;
count = 0;
segmentIdx += 1;
}
if (segmentIdx == nSegments)
{
ranges.Add(new Tuple<string, string, int>(start, "*", count + productsRemaining));
break;
}
}
return ranges;
}
फ़िल्टर परिणाम ("250", "500", 38) था परिणामी खंडों में से एक। यदि उपयोगकर्ता फ़िल्टर के रूप में "$ 250 से $ 500" का चयन करता है, तो बस एक फ़िल्टर क्वेरी fq=price:[250 TO 500]
पार्टी के लिए छह साल देर हो सकती है, लेकिन लिंक अब काम नहीं करते हैं। – Bucket
@DesertIvy सभी माध्यमों से कृपया उन्हें archive.org या कहीं और देखें और उत्तर संपादित करें। –
वाह, यह भी पता नहीं था कि अस्तित्व में है। महान उपकरण! – Bucket