Exemplo n.º 1
0
 void PhraseQuery::add(TermPtr term, int32_t position)
 {
     if (terms.empty())
         field = term->field();
     else if (term->field() != field)
         boost::throw_exception(IllegalArgumentException(L"All phrase terms must be in the same field: " + term->toString()));
     
     terms.add(term);
     positions.add(position);
     if (position > maxPosition)
         maxPosition = position;
 }
 bool TermRangeTermEnum::termCompare(TermPtr term)
 {
     if (!collator)
     {
         // Use Unicode code point ordering
         bool checkLower = false;
         if (!includeLower) // make adjustments to set to exclusive
             checkLower = true;
         if (term && term->field() == field)
         {
             if (!checkLower || VariantUtils::isNull(lowerTermText) || term->text().compare(VariantUtils::get<String>(lowerTermText)) > 0)
             {
                 checkLower = false;
                 if (!VariantUtils::isNull(upperTermText))
                 {
                     int32_t compare = VariantUtils::get<String>(upperTermText).compare(term->text());
                     // if beyond the upper term, or is exclusive and this is equal to the upper term, break out
                     if (compare < 0 || (!includeUpper && compare == 0))
                     {
                         _endEnum = true;
                         return false;
                     }
                 }
                 return true;
             }
         }
         else
         {
             // break
             _endEnum = true;
             return false;
         }
         return false;
     }
     else
     {
         if (term && term->field() == field)
         {
             if ((VariantUtils::isNull(lowerTermText) || 
                 (includeLower ? collator->compare(term->text(), VariantUtils::get<String>(lowerTermText)) >= 0 : 
                 collator->compare(term->text(), VariantUtils::get<String>(lowerTermText)) > 0)) && 
                 (VariantUtils::isNull(upperTermText) ||
                 (includeUpper ? collator->compare(term->text(), VariantUtils::get<String>(upperTermText)) <= 0 : 
                 collator->compare(term->text(), VariantUtils::get<String>(upperTermText)) < 0)))
                 return true;
             return false;
         }
         _endEnum = true;
         return false;
     }
 }
Exemplo n.º 3
0
 bool PrefixTermEnum::termCompare(TermPtr term)
 {
     if (term->field() == prefix->field() && boost::starts_with(term->text(), prefix->text()))
         return true;
     _endEnum = true;
     return false;
 }
Exemplo n.º 4
0
 PrefixTermEnum::PrefixTermEnum(IndexReaderPtr reader, TermPtr prefix)
 {
     this->_endEnum = false;
     this->prefix = prefix;
     
     setEnum(reader->terms(newLucene<Term>(prefix->field(), prefix->text())));
 }
Exemplo n.º 5
0
bool WildcardTermEnum::termCompare(const TermPtr& term) {
    if (field == term->field()) {
        String searchText(term->text());
        if (boost::starts_with(searchText, pre)) {
            return wildcardEquals(text, 0, searchText, preLen);
        }
    }
    _endEnum = true;
    return false;
}
Exemplo n.º 6
0
 void TermBuffer::set(TermPtr term)
 {
     if (!term)
     {
         reset();
         return;
     }
     String termText(term->text());
     int32_t termLen = termText.length();
     text->setLength(termLen);
     MiscUtils::arrayCopy(termText.begin(), 0, text->result.get(), 0, termLen);
     field = term->field();
     this->term = term;
 }
bool NumericRangeTermEnum::termCompare(const TermPtr& term) {
    return (term->field() == NumericRangeQueryPtr(_query)->field && term->text().compare(currentUpperBound) <= 0);
}