Zend_Search_Lucene aralığı sorgu hatası

3 Cevap php

Ben bir tarih alanı ile her belgeyi kurdunuz. (Anahtar kelime)

Içinde saklanan değerleri bu biçimi vardır; 20100511

Ben bir değişiyordu sorgu gerçekleştirmek için çalışın, her zaman, ben aşağıdaki hatayı alıyorum:

date:[10000000 TO 20000000]

At least one range query boundary term must be non-empty term

Herkes bir ipucu var mı?

Update

I have gotten this to work programmatically. Does that mean the parser is buggy?

$from  = new Zend_Search_Lucene_Index_Term('10000000', 'dateOfBirthMod');
$to    = new Zend_Search_Lucene_Index_Term('20000000', 'dateOfBirthMod');
$query = new Zend_Search_Lucene_Search_Query_Range($from, $to, true);

3 Cevap

Görünüşe it is a bug sorgu çözümleyici (oldukça eski btw). Ben bu konuda bir yorum eklemek veya hala ZF sürümü xx oluyor onaylamak için yeni bir pencere açın ya da öneririm.

Aslında, bu bir şüpheli varsayılan değil, bir hata daha. Sen numaraları izin analizörü değiştirebilirsiniz. Aslında, hatta özel bir analizörü yazabilirsiniz. Bkz http://framework.zend.com/manual/en/zend.search.lucene.extending.html

Sayılar simgelenebilinir izin için ayar

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());

ZF 1.x ve ZF 2.x

Zend\Search\Lucene\Analysis\Analyzer\Analyzer::setDefault(new Zend\Search\Lucene\Analysis\Analyzer\Common\TextNum\CaseInsensitive());

Ben Zend / Arama / Lucene / Analiz / Analyzer.php bulunabilir herhangi bir değer döndürmez ve değil tokenize denilen yöntemi () kaynaklanıyor bu hata için geçici bir çözüm yaptık

Eğer son ZF salınımını (1.10.7) kullanıyorsanız aşağıdaki biriyle kodunu değiştirmek için deneyebilirsiniz.

public function tokenize($data, $encoding = '')
{
    $this->setInput($data, $encoding);

    $tokenList = array();
    /*
    while (($nextToken = $this->nextToken()) !== null) {
        $tokenList[] = $this->_input;
    }
    */
        $tokenList[] = new Zend_Search_Lucene_Analysis_Token( $this->_input, 1, 1 );

    return $tokenList;
}

Ben eski sürümleri ya da çalışır mı bilmiyorum.