खोज…


परिचय

जब आप अपने दस्तावेज़ में प्राथमिक कुंजी फ़ील्ड (जैसे पारंपरिक SQL डेटाबेस) में एक ल्यूसीन सूचकांक से दस्तावेज़ हटाना आसान होता है।

हालाँकि, कभी-कभी दस्तावेज़ में कई फ़ील्ड्स के आधार पर कई दस्तावेज़ों को हटाने की आवश्यकता होती है। लुसीन एपीआई आपको विलोपन के लिए उपयोग करने के लिए एक क्वेरी निर्दिष्ट करके इसे प्राप्त करने की अनुमति देता है।

ऐसा करने के लिए, सही विश्लेषक चुनें, क्वेरी का निर्माण करें, दस्तावेज़ों को हटाने के लिए इंडेक्सवर्टर को क्वेरी पास करें।

वाक्य - विन्यास

  1. indexWriter.deleteDocuments (multiTermQuery);
  2. क्वेरी मल्टीटर्मिअ = नया QueryParser ("", विश्लेषक) .parse ("field_name1:" फ़ील्ड मान 1 "और field_name2:" फ़ील्ड मान 2 "");
  3. BooleanQuery मल्टीटर्मिअ = नया BooleanQuery (); multiTermQuery.add (नया टर्मिविजुअल (नया टर्म ("field_name1", "फ़ील्ड मान 1")), बूलियन क्लॉज़.ऑकुर.MUST); multiTermQuery.add (नया टर्मिविड (नया शब्द ("field_name2", "फ़ील्ड मान 2")), बूलियनक्लाउज .ccur.MUST);

टिप्पणियों

विश्लेषक की पसंद के साथ Caveats

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

विश्लेषक की पसंद

सबसे पहले, यह देखें कि आप किस विश्लेषक का उपयोग कर रहे हैं। मुझे थोड़ी देर के लिए ही अंदाजा हो गया था कि StandardAnalyzer 'a' और 'a' जैसे आम शब्दों को छानता है। यह एक समस्या है जब आपके क्षेत्र में 'A' का मान होता है। आप KeywordAnalyzer पर विचार करना चाह सकते हैं:

इस पोस्ट को विश्लेषक के आसपास देखें।

// Create an analyzer:
// NOTE: We want the keyword analyzer so that it doesn't strip or alter any terms:
// In our example, the Standard Analyzer removes the term 'A' because it is a common English word.
// http://stackoverflow.com/a/9071806/231860
KeywordAnalyzer analyzer = new KeywordAnalyzer();

क्वेरी पार्सर

इसके बाद, आप या तो क्वेरी क्वेरीर का उपयोग करके अपनी क्वेरी बना सकते हैं:

डिफ़ॉल्ट ऑपरेटर को ओवरराइड करने के आसपास यह पोस्ट देखें।

// Create a query parser without a default field in this example (the first argument):
QueryParser queryParser = new QueryParser("", analyzer);

// Optionally, set the default operator to be AND (we leave it the default OR):
// http://stackoverflow.com/a/9084178/231860
// queryParser.setDefaultOperator(QueryParser.Operator.AND);

// Parse the query:
Query multiTermQuery = queryParser.parse("field_name1:\"field value 1\" AND field_name2:\"field value 2\"");

क्वेरी API

या आप स्वयं उनके API का उपयोग करके क्वेरी का निर्माण करके इसे प्राप्त कर सकते हैं:

इस ट्यूटोरियल को BooleanQuery बनाने के आसपास देखें।

BooleanQuery multiTermQuery = new BooleanQuery();
multiTermQuery.add(new TermQuery(new Term("field_name1", "field value 1")), BooleanClause.Occur.MUST);
multiTermQuery.add(new TermQuery(new Term("field_name2", "field value 2")), BooleanClause.Occur.MUST);

क्वेरी से मेल खाने वाले दस्तावेज़ हटाएं

फिर हम अंततः क्वेरी से मेल खाने वाले दस्तावेज़ों को हटाने के लिए लेखक को क्वेरी पास करते हैं:

इस प्रश्न का उत्तर देखें।

यहां एपीआई देखें

// Remove the document by using a multi key query:
// http://www.avajava.com/tutorials/lessons/how-do-i-combine-queries-with-a-boolean-query.html
indexWriter.deleteDocuments(multiTermQuery);


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow