2012-05-01 4 views
5

एक बड़ा सवाल यह भी हल करने में सक्षम होगा? मुझे पता है कि मैंने देखा है कि ल्यूसीन ऐसा करने में सक्षम है और सोलर लुसीन पर बनाया गया है।पूर्णांक कैसे पूछें, ल्यूसीन में तैरते हैं और कैसे स्टोर करें (न्यूमेरिक कॉम्पेटर)?

मैंने Google का उपयोग करके कहीं भी एक उदाहरण देखा है लेकिन इसे फिर से नहीं लग रहा है, और उदाहरण उसमें पूरा नहीं हुआ था, मुझे नहीं लगता कि यह ल्यूसीन के लिए मेरा प्रश्न विवरण कैसे लिखता है, इस पर क्वेरी भाग था। मुझे एक न्यूमेरिक फ़ील्ड देखना याद है और यह न्यूमेरिक कॉम्पेटर है।

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

मैं मूल रूप से

को
  1. पता लगाने आदि बाहर की जरूरत है कि कैसे पूर्णांकों स्टोर करने के लिए, तैरता है,
  2. आंकड़ा कैसे एक Lucene क्वेरी लिखने के लिए जब लक्ष्य तार कर रहे हैं, तैरता है, ints, आदि

अभी, अगर आप अधिक जानकारी की आवश्यकता परियोजना का मुख्य क्वेरी कोड https://github.com/deanhiller/nosqlORM/blob/master/input/javasrc/com/alvazan/orm/layer3/spi/index/inmemory/MemoryIndexWriter.java

पर और लाइन 17 पर पाया जाता है 2 आप देख सकते हैं कि मैं हर बार एक नया क्षेत्र जोड़ रहा हूं लेकिन दुर्भाग्यवश इनमें से कुछ चींटियां हो सकती हैं।

बड़ा प्रश्न: क्या एसओएलआर भी int बनाम स्ट्रिंग का समर्थन कर सकता है? (अगर नहीं, मुझे पैंटिंग 0 के हैक के साथ इन्स, लम्बे आदि के सामने जाना होगा, इसलिए सभी चींटियां एक ही लंबाई हैं)।

यदि एसओएलआर इसका समर्थन कर सकता है, तो लुसीन में सबसे अच्छा तरीका क्या है या इसके लिए एक अच्छा उदाहरण है?

मुख्य इंडेक्स NoSqlEntityManager.getIndex (कक्षा clazz, स्ट्रिंग indexPartitionName) से लिया गया इंटरफ़ेस (हालांकि यकीन नहीं यह मायने रखता है) है .. https://github.com/deanhiller/nosqlORM/blob/master/input/javasrc/com/alvazan/orm/api/Index.java

धन्यवाद, डीन

उत्तर

8

example SOLR schema.xml फ़ाइल से:

<!-- 
     Default numeric field types. For faster range queries, consider the tint/tfloat/tlong/tdouble types. 
    --> 
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> 
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/> 
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/> 
<!-- 
    Numeric field types that index each value at various levels of precision 
    to accelerate range queries when the number of values between the range 
    endpoints is large. See the javadoc for NumericRangeQuery for internal 
    implementation details. 

    Smaller precisionStep values (specified in bits) will lead to more tokens 
    indexed per value, slightly larger index size, and faster range queries. 
    A precisionStep of 0 disables indexing at different precision levels. 
    --> 
<fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/> 
<fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/> 
<fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/> 
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/> 

तो यदि आप उपरोक्त उन फ़ील्ड प्रकारों में से एक के रूप में फ़ील्ड को इंडेक्स करते हैं, तो इसे अपने फील्डनाम के माध्यम से पूछें (उदाहरण के लिए myIntField:1234) यह "सही चीज़" करेगा और आप इसके खिलाफ रेंज खोज भी कर सकते हैं (myIntField:[1200 TO 1300])। फ्लोट के लिए भी जाता है, आदि

+0

महान, तो फिर लुसीन के बारे में क्या है ताकि मैं अपनी इन-मेमोरी भी काम कर सकूं। (मुझे इन-मेमोरी पसंद है क्योंकि हम बड़े टीडीडी लोग हैं और यूनिट परीक्षण तब इन-मेमोरी इंडेक्स और नोस्कल डीबी और लाइव कैसंड्रा और सोलर के साथ उत्पादन कार्य में काम करते हैं) .. इस तरह से सही वातावरण। –

2

मुझे लगता है कि हम org.apache.lucene.documentNumericField क्लास का लाभ उठा सकते हैं। इस वर्ग में, हम सेट विधि को कॉल कर सकते हैं, यह int, log, float और double का समर्थन कर सकता है। अन्य डेटा प्रकार (उदा। बूल, डेटाटाइम) के लिए, हम उन्हें विशेष रूप से int या लंबे प्रकार में बदलने के लिए विशेष रूप से परिवर्तित कर सकते हैं।

बीटीडब्लू, मैंने ल्यूसीन के नवीनतम स्रोत कोड को देखा, जिसमें नए क्लोज़ शामिल हैं: फ्लोटफिल्ड, इंटफिल्ड, लॉन्गफिल्ड एडीएन डबलफिल्ड। इसे अगली रिलीज में शामिल किया जाएगा। http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/document/

+0

हां, मुझे लगता है कि हमें TrieFloaField, TrieIntField, आदि का उपयोग करने की आवश्यकता हो सकती है .... http: //lucene.apache.org/solr/api/org/apache/solr/schema/TrieFloatField.html –

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