2011-01-07 16 views
32

तो मेरे पास सोलर के फील्ड डेट प्रकारों के बारे में एक सवाल है जो काफी सीधे आगे है: 'डेट' फ़ील्ड और 'tdate' के बीच क्या अंतर है?सोलर डेट फ़ील्ड टीडीएटी बनाम तिथि?

स्कीमा .xml का दावा है कि 'तेजी से सीमा प्रश्नों के लिए, tdate प्रकार' और 'ए ट्री आधारित दिनांक फ़ील्ड को तेज़ दिनांक सीमा प्रश्नों और दिनांक पहलू के लिए मानें। ' पर्याप्त मेला ... लेकिन सटीक चरण = "6" क्या है? क्या मुझे यह बदलना चाहिए? क्या मैं tdate का उपयोग करने के मामले में क्वेरी बनाने के तरीके को बदलता हूं? वास्तविक लाभ क्या है या सौर क्या करता है जो इसे बेहतर बनाता है?

पुनश्च किसी भी भाग्य के बिना गूगल, Solr पुस्तिका, Solr विकी और जावा डॉक्स माध्यम से चला गया तो मैं एक तरह की और व्याख्यात्मक जवाब सराहना करेंगे:) ... भी जांच की गई: http://www.lucidimagination.com/blog/2009/05/13/exploring-lucene-and-solrs-trierange-capabilities/ http://web.archiveorange.com/archive/v/AAfXfqRYyLnDFtskmLRi

+4

5 साल बाद, अभी भी Google, सोलर मैनुअल, सोलर विकी आदि के साथ एक ही स्थिति है। ओह, नहीं, कुछ बदल गया है: Google अब यहां इंगित करता है :) – alisa

उत्तर

11

अच्छा सवाल :-)! मैंने कहीं अच्छा जवाब पढ़ा, दुख की बात यह फिर से नहीं मिल पाई।

असल में त्रिकोणीय श्रेणियां तेजी से हैं। Here एक स्पष्टीकरण है। सटीक चरण के साथ आप कॉन्फ़िगर करते हैं कि प्रदर्शन लाभ प्राप्त करने के लिए आपकी अनुक्रमणिका कितनी बढ़ सकती है। लिंक से उद्धरण के लिए आप संदर्भ दे रहे हैं:

"अधिक महत्वपूर्ण बात यह है कि यह सूचकांक आकार पर निर्भर नहीं है, बल्कि इसके बजाय सटीक चुना गया है।"

और

3
आपका सबसे अच्छा

शर्त सिर्फ स्रोत कोड को देखना है। सोलर के लिए कुछ चीजें अच्छी तरह से प्रलेखित नहीं हैं और भरोसेमंद उत्तर पाने का सबसे तेज़ तरीका केवल कोड को देखना है। यदि आप अभी तक कोड में नहीं हैं, तो यह भी आपके लाभ के लिए है। कम से कम लंबे समय में।

यहां TrieTokenizerFactory का एक लिंक है।

http://www.jarvana.com/jarvana/view/org/apache/solr/solr-core/1.4.1/solr-core-1.4.1-sources.jar!/org/apache/solr/analysis/TrieTokenizerFactory.java?format=ok

कक्षा में जावाडोक कम से कम precisionStep के प्रयोजन पर संकेत। आप फ्यूचर खोद सकते हैं।

संपादित करें: मैंने आपके लिए थोड़ा और खोला है। इसे सीधे लुसीन की न्यूमेरिक टोकनस्ट्रीम क्लास में भेज दिया जाता है, जो टोकन स्ट्रीम को पार्स करने के दौरान मूल्य का उपयोग करेगा। शायद निकट परीक्षा के लायक है। ऐसा लगता है कि यह ग्रैन्युलरिटी से निपटता है और शायद सूचकांक और गति में आकार के बीच एक व्यापार है।

+0

नीट, प्रतिक्रियाओं के लिए धन्यवाद ... मुझे भी अच्छा लगा ल्यूसीन मंचों में पोस्ट करें, जो थोड़ा और स्पष्ट करता है कि टीडीएटी के साथ क्या सौदा है ... जाहिर है, यह वही तरीका है जो सौर क्षेत्र को फ़ील्ड करता है और इसका आकार: http://lucene.472066.n3.nabble.com/बेस्ट- प्रदर्शन-for-facet-dates-in-trunk-using-solr-TrieDateField-td487668.html इंडेक्स आकार और प्रदर्शन के अनुसार विकल्पों के अलावा, मुझे कोई अन्य सामान नहीं मिला है जिसे बदलने की आवश्यकता होगी यदि आप tdate विकल्प का उपयोग करते हैं। –

37

Trie क्षेत्रों सीमा निश्चित सीमा परिणाम precomputing और भंडारण के द्वारा तेजी से प्रश्नों बनाने "TrieRange का केवल कमियां क्योंकि अतिरिक्त अनुक्रमित पदों की, एक छोटा सा बड़ा सूचकांक आकार हैं" उन्हें सूचकांक में एक रिकॉर्ड के रूप में। स्पष्टता के लिए, मेरा उदाहरण आधार दस में पूर्णांक का उपयोग करेगा। एक ही अवधारणा सभी trie प्रकारों पर लागू होती है। इसमें तिथियां शामिल हैं, क्योंकि दिनांक, 1 9 70 के बाद से सेकंड की संख्या के रूप में प्रदर्शित किया जा सकता है।

मान लें कि हम 12345678 नंबर को इंडेक्स करते हैं। हम इसे निम्नलिखित टोकन में टोकननाइज़ कर सकते हैं।

12345678 
123456xx 
1234xxxx 
12xxxxxx 

12345678 टोकन वास्तविक पूर्णांक मान का प्रतिनिधित्व करता है। x अंकों के साथ टोकन रेंज का प्रतिनिधित्व करते हैं।123456xx12345600 से 12345699 तक का प्रतिनिधित्व करता है, और उस श्रेणी में टोकन वाले सभी दस्तावेज़ों से मेल खाता है।

ध्यान दें कि सूची में प्रत्येक टोकन में x अंकों की संख्या कितनी है। यह सटीक कदम से नियंत्रित है। मेरे उदाहरण में, आप कह सकते हैं कि मैं 2 का सटीक चरण उपयोग कर रहा था, क्योंकि मैं प्रत्येक अतिरिक्त टोकन बनाने के लिए 2 अंक ट्रिम करता हूं। अगर मैं 3 के सटीक चरण का उपयोग करना चाहता था, तो मुझे इन टोकन मिलेंगे।

12345678 
12345xxx 
12xxxxxx 

4 का एक सटीक कदम:

12345678 
1234xxxx 

1 का एक सटीक कदम:

12345678 
1234567x 
123456xx 
12345xxx 
1234xxxx 
123xxxxx 
12xxxxxx 
1xxxxxxx 

यह देखना आसान है कि कैसे एक छोटे और अधिक टोकन में सटीक कदम परिणाम और आकार बढ़ जाती है सूचकांक का। हालांकि, यह सीमा प्रश्नों को भी गति देता है।

trie क्षेत्र के बिना, अगर मैं 1250 से 1275 के लिए एक सीमा क्वेरी करने के लिए चाहता था, Lucene 25 प्रविष्टियों को लाने के लिए होता है (1250, 1251, 1252, ..., 1275) और खोज परिणामों को जोड़ सकते। एक Trie क्षेत्र (और 1 की शुद्धता कदम) के साथ, हम 8 प्रविष्टियों को लाते समय के साथ भाग मिल सकता है (125x, 126x, 1270, 1271, 1272, 1273, 1274, 1275), क्योंकि 125x1250 के precomputed एकत्रीकरण है - 1259। अगर मैं 1 से बड़े परिशुद्धता चरण का उपयोग करना चाहता था, तो क्वेरी सभी 25 व्यक्तिगत प्रविष्टियों को लाने के लिए वापस जायेगी।

नोट: असल में, सटीक चरण प्रत्येक टोकन के लिए छंटनी की बिट्स की संख्या को संदर्भित करता है। यदि आप हेक्साडेसिमल में अपनी संख्याएं लिखना चाहते थे, तो 4 का एक सटीक चरण प्रत्येक टोकन के लिए एक हेक्स अंक को ट्रिम करेगा। 8 का एक सटीक चरण दो हेक्स अंकों को ट्रिम करेगा।

+1

बहुत बढ़िया स्पष्टीकरण। मैं परिशुद्धता चरणों को समझने की कोशिश कर रहे घंटों के लिए पढ़ रहा हूं, और यह पहला स्पष्टीकरण है जो समझ में आया है। –

+0

ध्यान दें कि 1 9 70 से कुछ सेकंड ऐसा करने का सैद्धांतिक तरीका नहीं है। यह वास्तव में जिस तरह से किया गया है, और यदि आपके पास शून्य तिथि फ़ील्ड है, तो इसे 1 9 70 से 0 सेकंड माना जाएगा। परिणाम नल और गैर शून्य ट्राई डेट फ़ील्ड ऑर्डर करना भयानक है। आपको 1 9 70 से पहले तिथियां मिलती हैं, शून्य मान, फिर 1 9 70 के बाद की तिथियां। – mlissner

संबंधित मुद्दे