2013-07-12 7 views
5

में एकाधिक प्रश्न मेरी समस्या है कि मेरे पास एन फ़ील्ड हैं (लगभग 10 कहें) सोलर में जो खोजने योग्य हैं, वे सभी अनुक्रमित और संग्रहीत हैं। मैं 5000 डॉक्स के अपने पूरे इंडेक्स पर पहली बार एक क्वेरी चलाने की इच्छा रखूंगा जो 500 डॉक्स के औसत पर पहुंच जाएगा। इसके बाद मैं इन 500 दस्तावेज़ों पर कीवर्ड के एक अलग सेट का उपयोग करके क्वेरी करना चाहता हूं और पूरे सूचकांक पर नहीं।सोलर

तो पहली बार जब मैं एक प्रश्न भेजता हूं तो एक स्कोर उत्पन्न होगा, दूसरी बार जब मैं एक प्रश्न चलाता हूं तो नया स्कोर उत्पन्न होता है, पिछली क्वेरी के 500 दस्तावेज़ों पर आधारित होना चाहिए, या दूसरे शब्दों में सोलर को केवल इन पर विचार करना चाहिए पूरे सूचकांक के रूप में 500 दस्तावेज़।

इसे सारांशित करने के लिए, 5000 का सूचकांक 500 में फ़िल्टर किया जाएगा और फिर 50 (5000> 500> 50)। यह मूल रूप से फ़िल्टरिंग है लेकिन मैं इसे सोलर में करना चाहता हूं।

मेरे पास उचित बुनियादी ज्ञान है और अभी भी सीख रहा है।

अद्यतन: तो गणितीय प्रतिनिधित्व किया इसे इस तरह दिखेगा:

results1=f(query1) 
results2=f(query2, results1) 
final_results=f(query3, results2) 

मैं इस एक कार्यक्रम और अंत उपयोगकर्ता का उपयोग कर केवल देखेंगे 50 परिणाम पूरा होना चाहते हैं। तो faceting एक विकल्प नहीं है।

उत्तर

3

Filter queries (fq) विशेष रूप से त्वरित प्रतिबंध करने के लिए डिज़ाइन किए गए हैं किसी भी स्कोर गणना नहीं कर परिणाम के परिणाम।

तो, यदि आप अपनी पहली क्वेरी को fq पैरामीटर में डालते हैं और सामान्य 'q' पैरामीटर में आपकी दूसरी स्कोर-जनरेटिंग क्वेरी डालते हैं, तो आपको जो करना चाहिए वह करना चाहिए।

a question discussing this issue from the opposite direction भी देखें।

+0

थैंक्स अलेक्जेंड्रे, मेरे प्रारंभिक परीक्षण के आधार पर मैं कह सकता हूं कि यह मेरी समस्या का समाधान करता है। इसके अलावा मुझे लगता है कि लिया गया समय गुस के समाधान से बहुत कम है। आपके और गुस के समाधान के संयोजन को मेरी समस्या को व्यापक रूप से हल करना चाहिए। – user2575429

0

सोलर से "पहचाने गए खोज" पर नज़र डालें: http://wiki.apache.org/solr/SolrFacetingOverview इससे आपको इस तरह की "पुनरावृत्ति" खोज में मदद मिलेगी।

+0

अरे थेंक्स, मैं पहलुओं के बारे में जानता हूं लेकिन मैं इसका उपयोग नहीं करना चाहता हूं। भाग ड्रिलिंग, मैं इसे एक कार्यक्रम में करना चाहता हूं। अंतिम उपयोगकर्ता केवल 50 परिणामों के अंतिम सेट को देखेगा और कुछ भी नहीं। पहली क्वेरी के बाद मैं पूरी तरह से अलग पैरामीटर के साथ प्राप्त परिणामों पर दूसरी क्वेरी चलाने के लिए चाहता हूं। – user2575429

2

मेरा मानना ​​है कि आप इस तरह से एक नेस्टेड क्वेरी का उपयोग करना चाहते हैं:

text:"roses are red" AND _query_:"type:poems" 

आप नेस्टेड प्रश्नों के बारे में अधिक पढ़ सकते हैं:

http://searchhub.org/2009/03/31/nested-queries-in-solr/

+0

थैंक्स गुस, मुझे लगता है कि यह मेरी आवश्यकता के लिए एक अच्छा दृष्टिकोण है और मैं इसमें अधिक खोज कर रहा हूं, कुछ परीक्षण करूंगा और देखें कि यह कैसे काम करता है। तुम्हारी सहायता सराहनीय है। – user2575429

5

दो संभावना कार्यान्वयन मेरे लिए होते हैं। सबसे आसान तरीका केवल दूसरी क्वेरी में पहली क्वेरी जोड़ना होगा;

+(first query) +(new query) 

यह एक अच्छा तरीका है यदि पहली क्वेरी, जिसे आप फ़िल्टर करना चाहते हैं, अक्सर बदलते हैं। पहली क्वेरी दस्तावेजों की एक श्रेणी, या कुछ इसी तरह की तरह कुछ है जहाँ आप एक ही फिल्टर का पुन: उपयोग से लाभ उठा सकते है, तो एक फिल्टर क्वेरी बेहतर दृष्टिकोण है, fq parameter का उपयोग कर, कुछ की तरह:

q=field:query2&fq=categoryField:query1 

फिल्टर प्रश्नों को फ़िल्टर करने के लिए दस्तावेज आईडी का एक सेट कैश करता है, इसलिए आमतौर पर उपयोग की जाने वाली खोजों जैसे कि श्रेणियों, सामान्य दिनांक सीमाओं आदि के लिए, एक महत्वपूर्ण प्रदर्शन लाभ प्राप्त किया जा सकता है (असामान्य खोजों के लिए, या उपयोगकर्ता द्वारा दर्ज खोज तारों के लिए, यह हो सकता है परिणामों को कैश करने के लिए केवल अनावश्यक ओवरहेड लें, और बेकार परिणाम सेट के साथ कैश को प्रदूषित करें)