Ошибка запроса диапазона Zend_Search_Lucene - PullRequest
3 голосов
/ 11 мая 2010

Я настроил каждый документ с полем даты. (Ключевое слово)

Значения хранятся в этом формате; 20100511

Каждый раз, когда я пытаюсь выполнить ранжированный запрос, я получаю следующую ошибку:

date:[10000000 TO 20000000]

Как минимум один термин границы диапазона запроса должен быть непустой термин

Кто-нибудь получил подсказку?

Обновление

Я заставил это работать программно. Значит ли это, что парсер глючит?

$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 ]

3 голосов
/ 29 августа 2010

На самом деле, это скорее сомнительный по умолчанию, а не ошибка. Вы можете изменить анализатор, чтобы разрешить номера. На самом деле, вы даже можете написать собственный анализатор. Смотри 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());
2 голосов
/ 11 мая 2010

Видимо это ошибка в парсере запросов (кстати, довольно старая). Я бы посоветовал вам добавить комментарий к этой проблеме или открыть новый, чтобы подтвердить, что это все еще происходит в версии x.x ZF.

1 голос
/ 03 августа 2010

Я сделал обходной путь для этой ошибки, которая вытекает из метода tokenize (), который не возвращает никакого значения и который можно найти в Zend / Search / Lucene / Analysis / Analyzer.php

Вы можете попытаться заменить код следующим, если вы используете последнюю версию 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;
}

Я не знаю, работает ли он в старых версиях или нет.

0 голосов
/ 05 августа 2014

Во-первых, вы должны изменить анализатор по умолчанию на TextNum, чтобы разрешить число, прежде чем найти

ZF2:

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

Во-вторых, ваше поле даты ДОЛЖНО быть ключевым словом, а не текстом.

...