खोज…


BooleanQuery

BooleanQuery का उपयोग अन्य प्रश्नों को संयोजित करने के लिए किया जाता है।

उन्हें तीन बूलियन क्लॉज का उपयोग करके जोड़ा जा सकता है। हमारे पैरामीटर:

  • BooleanClause.Occur.MUST - BooleanClause.Occur.MUST मिलान किया जाना चाहिए।
  • BooleanClause.Occur.SHOULD - सबक्वेरी का मिलान नहीं किया जा सकता है, लेकिन यदि यह है तो इसे बहुत अधिक स्कोर किया जाएगा। यदि कोई MUST क्लॉज नहीं हैं, तो कम से कम एक SHOULD क्लॉज का मिलान किया जाना चाहिए।
  • BooleanClause.Occur.MUST_NOT - सबक्वेरी को दस्तावेज़ से मेल नहीं खाना चाहिए।

इस उदाहरण में, अगर यह "महत्वपूर्ण" है एक दस्तावेज़ से मेल खाएगा, लेकिन "मना", और एक उच्च अंक प्राप्त करेगा कि क्या यह भी है "मददगार"।

Query importantQuery = new TermQuery(new Term("fieldname", "important"));
Query optionalQuery = new TermQuery(new Term("fieldname", "helpful"));
Query forbidQuery = new TermQuery(new Term("fieldname", "forbidden"));
BooleanQuery query = new BooleanQuery.Builder()
        .add(importantQuery, BooleanClause.Occur.MUST) 
        .add(optionalQuery, BooleanClause.Occur.SHOULD) 
        .add(forbidQuery, BooleanClause.Occur.MUST_NOT) 
        .build();

वैकल्पिक रूप से, आप उन क्लॉज़ की न्यूनतम संख्या भी निर्दिष्ट कर सकते हैं जिनका मिलान होना चाहिए:

Query query1 = new TermQuery(new Term("fieldname", "one"));
Query query2 = new TermQuery(new Term("fieldname", "two"));
Query query3 = new TermQuery(new Term("fieldname", "three"));
BooleanQuery query = new BooleanQuery.Builder()
        .add(query1, BooleanClause.Occur.SHOULD) 
        .add(query2, BooleanClause.Occur.SHOULD) 
        .add(query3, BooleanClause.Occur.SHOULD)
        .setMinimumNumberShouldMatch(2)
        .build();

Gotcha: BooleanClause.Occur.MUST_NOT with BooleanClause.Occur.MUST_NOT बाकी सब से मेल नहीं खाते हैं, वे केवल मैच खत्म करते हैं। आपके BooleanQuery में कम से कम एक MUST या SHOULD क्लॉज़ होना SHOULD , या यह कुछ भी मेल नहीं खाएगा। यह, उदाहरण के लिए, काम नहीं करेगा:

//***This does NOT work!***
Query forbidQuery = new TermQuery(new Term("fieldname", "forbidden"));
BooleanQuery getEverythingElseQuery = new BooleanQuery.Builder()
        .add(forbidQuery, BooleanClause.Occur.MUST_NOT) 
        .build();

PhraseQuery

PhraseQuery का उपयोग शब्दों के अनुक्रम को खोजने के लिए किया जाता है। निम्नलिखित वाक्यांश "हैलो वर्ल्ड" से मेल खाता है ( StandardAnalyzer साथ अनुक्रमित होने के बाद)

Query query = new PhraseQuery.Builder()
        .add(new Term("text", "hello"))
        .add(new Term("text", "world"))
        .build();

सेटस्लोप के साथ अधिकतम संपादन दूरी तय करके, setSlop एक क्वेरी के भीतर "स्लोप" या अतिरिक्त शब्दों को भी संभाल सकता है। यह "लोरम इपसम सिट एमेट डोलर" से मेल खाएगा:

Query query = new PhraseQuery.Builder()
        .add(new Term("text", "lorem"))
        .add(new Term("text", "amet"))
        .setSlop(2)
        .build();

आप सटीक स्थिति वृद्धि भी सेट कर सकते हैं:

Query query = new PhraseQuery.Builder()
        .add(new Term("text", "lorem"), 0)
        .add(new Term("text", "sit"), 2)
        .add(new Term("text", "dolor"), 4)
        .build();

DisjunctionMaxQuery

यह ऐसी क्वेरीज़ को जोड़ता है, जो कि सबकुछ का सबसे अच्छा (यानी उच्चतम स्कोरिंग) मैच अंतिम स्कोर में योगदान देता है।

List<Query> disjuncts = new ArrayList<Query>();
disjuncts.add(new TermQuery(new Term("fieldname", "hello")));
disjuncts.add(new TermQuery(new Term("fieldname", "world")));
Query query = new DisjunctionMaxQuery(disjuncts, 0.0f);

DisjunctionMaxQuery कंस्ट्रक्टर का दूसरा तर्क एक टाईब्रेकर मूल्य है, जो गैर-शून्य होने पर, गैर-अधिकतम मिलानों को तोड़ने के लिए स्कोर करने के लिए कुछ छोटे योगदान करने की अनुमति देता है। यह आम तौर पर छोटा होना चाहिए (0.1 के आदेश पर)।

उकसाने वाले सवाल

अन्य उपश्रेणियों के सापेक्ष स्कोर बढ़ाने के लिए एक क्वेरी को बढ़ाया जा सकता है। यह एक BoostQuery के साथ लपेटकर किया जाता है

Query lessRelevantQuery = new TermQuery(new Term("fieldname", "ipsum"));
//Five times as interesting
Query highlyRelevantQuery = new BoostQuery(
         new TermQuery(new Term("fieldname", "lorem")), 
         5.0f);
BooleanQuery query = new BooleanQuery.Builder()
        .add(lessRelevantQuery, BooleanClause.Occur.SHOULD) 
        .add(highlyRelevantQuery, BooleanClause.Occur.SHOULD) 
        .build();


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