मैं डेटाबेस तालिका से कुछ फ़ील्ड इंडेक्स करने के लिए Lucene.Net 2.0 का उपयोग कर रहा हूं। खेतों में से एक एक 'नाम' फ़ील्ड है जो विशेष पात्रों की अनुमति देता है। जब मैं कोई खोज करता हूं, तो मुझे ऐसा दस्तावेज़ नहीं मिलता है जिसमें विशेष वर्ण वाले शब्द होते हैं।लुसीन और विशेष वर्ण
मैं सूचकांक मेरी क्षेत्र जैसे:
Directory DALDirectory = FSDirectory.GetDirectory(@"C:\Indexes\Name", false);
Analyzer analyzer = new StandardAnalyzer();
IndexWriter indexWriter = new IndexWriter(DALDirectory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
Document doc = new Document();
doc.Add(new Field("Name", "Test (Test)", Field.Store.YES, Field.Index.TOKENIZED));
indexWriter.AddDocument(doc);
indexWriter.Optimize();
indexWriter.Close();
और मैं निम्न कार्य खोज:
value = value.Trim().ToLower();
value = QueryParser.Escape(value);
Query searchQuery = new TermQuery(new Term(field, value));
Searcher searcher = new IndexSearcher(DALDirectory);
TopDocCollector collector = new TopDocCollector(searcher.MaxDoc());
searcher.Search(searchQuery, collector);
ScoreDoc[] hits = collector.TopDocs().scoreDocs;
अगर मैं 'टेस्ट' के रूप में 'नाम' और मूल्य के रूप में क्षेत्र के लिए एक खोज करते हैं, यह दस्तावेज़ पाता है। यदि मैं 'नाम' और 'टेस्ट (टेस्ट)' के रूप में एक ही खोज करता हूं, तो उसे दस्तावेज़ नहीं मिलता है।
और भी अजीब, अगर मैं QueryParser को हटा देता हूं। ऐस्केप लाइन एक GUID (जो, ज़ाहिर है, इसमें हाइफ़न होते हैं) की खोज होती है, यह दस्तावेजों को पाता है जहां GUID मान मेल खाता है, लेकिन मूल्य के साथ समान खोज को ' टेस्ट (टेस्ट) 'अभी भी कोई परिणाम नहीं देता है।
मुझे यकीन है कि मैं क्या गलत कर रहा हूं। मैं विशेष वर्णों से बचने के लिए QueryParser.Escape विधि का उपयोग कर रहा हूं और क्षेत्र को संग्रहीत कर रहा हूं और Lucene.Net के उदाहरणों से खोज रहा हूं।
किसी भी विचार?
क्या मुझे अपना लक्ष्य प्राप्त करने के लिए उपयोग करने के लिए एक और विश्लेषक पर विचार करना चाहिए? विशेष वर्णों वाले फ़ील्ड को संग्रहीत करते समय टोकनयुक्त के बीच टोकनयुक्त के बीच स्विच करने के बारे में क्या? – Brandon
अच्छी तरह से यदि आप फ़ील्ड को टोकननाइज़ नहीं करते हैं तो आप उस पर "खोज" नहीं सकते हैं। आपके पास कुछ विकल्प हैं जो आपके स्वयं के विश्लेषक लिखते हैं (बहुत सरल है) या मानक विश्लेषक को स्टॉप शब्दों की सूची पास करें। कुछ ऐसा: हैशटेबल htStopwords = नया हैशटेबल(); विश्लेषक विश्लेषक = नया मानक विश्लेषक (एचटीएसटॉपवर्ड); – Mikos
आप StopAnalyzer या SimpleAnalyzer को भी देख सकते हैं ... वे मदद कर सकते हैं। समस्या यह है कि आप बहुत सारे शोर शब्द खत्म कर सकते हैं। लेकिन अगर यह कोई मुद्दा नहीं है .... – Mikos