2011-10-23 16 views
5

ठीक है, मैंने पिछले दो घंटों में इसकी खोज की है जिसके परिणाम केवल केवल सुझाव हैं, और बचाव के लिए एक भी पूरा कोड नहीं है (अगर कोई कुछ नहीं देख पाता है तो नोबस कैसे सीखेंगे ? नमूने)ल्यूसीन - एक संख्यात्मक मूल्य फ़ील्ड के लिए खोज

मैं बहुत की तरह एक सूचकांक बनाया है:

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels/"))); 
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 
IndexWriter writer = new IndexWriter(directory, analyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED); 
Document doc = new Document(); 
doc.Add(new Field("ID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("parentID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("Title", "Root", Field.Store.YES, Field.Index.ANALYZED)); 
writer.AddDocument(doc); 
writer.Optimize(); 
writer.Close(); 

अब, मैं क्षेत्र ID लिए खोज करना चाहते कहाँ मूल्य 0 के बराबर होती है (एकल रिकॉर्ड मैं वहाँ है) प्राप्त करने के लिए ...

लेकिन, इस तरह की एक साधारण खोज:

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels"))); 
Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Version.LUCENE_29); 
Searcher searcher = new Lucene.Net.Search.IndexSearcher(IndexReader.Open(directory, true)); 
Query query = new Lucene.Net.QueryParsers.QueryParser(Version.LUCENE_29, "ID", analyzer).Parse("0"); 
Hits hits = searcher.Search(query); 

कोई परिणाम नहीं देता है। मैंने NumericRange, KeywordAnalyzer और कुछ और चीजें, पढ़ी हैं, लेकिन उनमें से कोई भी नमूना प्रदान नहीं करता है, इसलिए मैं यह नहीं समझ सकता कि इसे कैसे किया जाए।

कृपया, दयालु लोग, मुझे यह उदाहरण दें कि यह चीज़ कैसे काम करे।

उत्तर

7

बदलें Field.Index.NOField.Index.ANALYZED (या Field.Index.NOT_ANALYZED) ID फ़ील्ड में करने के लिए

9

मैं संख्या के लिए Lucene अनुक्रमणिका खोज करने के लिए NumericField और एक NumericRangeQuery इस्तेमाल किया है।

सूचकांक बनाते समय:

NumericField taxonRankSortOrder = new NumericField("TaxonRankSortOrder", Field.Store.YES, true); 
    taxonRankSortOrder.SetIntValue(rank); 
    document.Add(taxonRankSortOrder); 

और फिर एक प्रश्न का उपयोग कर:

NumericRangeQuery query = NumericRangeQuery.NewIntRange("TaxonRankSortOrder", 3000, 3000, true, true); 

सभी दस्तावेजों आप क्वेरी बनाने के लिए वापसी करेंगे एक TaxonRankSortOrder 3000

के बराबर के साथ खुद को क्वेरीपर्सर का उपयोग करने के बजाय स्वयं यह देखने के लिए उत्सुक होगा कि कोई बेहतर दृष्टिकोण भी है या नहीं।

+4

यदि आप केवल एक int खोज रहे हैं, तो आपको सीमा से खोज करने की आवश्यकता नहीं है। बस इसका उपयोग करें: टर्मक्वायर क्वेरी = नया टर्मक्वायर (नया टर्म ("टैक्सन रैंकस्पोर्टऑर्डर", न्यूमेरिक यूटिल्स। इंंटोफ्रिक्सिक्स (3000)); –

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