3

各ドキュメントに日付フィールドを設定しました。(キーワード)

そこに格納されている値はこの形式です。20100511

範囲クエリを実行しようとするたびに、次のエラーが発生します。

date:[10000000 TO 20000000]

少なくとも1つの範囲クエリ境界用語は空でない用語である必要があります

誰かが手がかりを得ましたか?

アップデート

私はこれをプログラムで動作させることができました。それはパーサーがバグがあることを意味しますか?

$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);
4

4 に答える 4

3

実際、これはバグではなく、疑わしいデフォルトです。数値を許可するようにアナライザーを変更できます。実際、カスタム アナライザーを作成することもできます。http://framework.zend.com/manual/en/zend.search.lucene.extending.htmlを参照してください。

数字のトークン化を許可する設定は

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());

Zf 1.x および Zf 2.x

Zend\Search\Lucene\Analysis\Analyzer\Analyzer::setDefault(new Zend\Search\Lucene\Analysis\Analyzer\Common\TextNum\CaseInsensitive());
于 2010-08-29T17:13:39.583 に答える
2

どうやらクエリパーサーのバグです(かなり古いところで)。その問題にコメントを追加するか、新しい問題を開いて、ZF のバージョン xx でまだ発生していることを確認することをお勧めします。

于 2010-05-11T17:23:14.127 に答える
1

Zend/Search/Lucene/Analysis/Analyzer.php にある、値を返さない tokenize() というメソッドに起因するこのバグの回避策を作成しました。

最新の ZF リリース (1.10.7) を使用している場合は、コードを次のコードに置き換えることができます。

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;
}

古いリリースで機能するかどうかはわかりません。

于 2010-08-03T12:38:53.573 に答える
0

まず、デフォルトの Analyzer を TextNum に変更して、検索する前に数値を許可する必要があります

ZF2:

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

次に、日付フィールドはテキストではなくキーワードでなければなりません。

于 2014-08-05T08:42:21.177 に答える