Symfony и Zend Lucene Ошибка - PullRequest
       27

Symfony и Zend Lucene Ошибка

0 голосов
/ 13 июля 2011

Я использую Symfony с Zend Lucene Search. У меня

$query = Zend_Search_Lucene_Search_QueryParser::parse($query.'*');
$hits = self::getLuceneIndex()->find($query);

Иногда у меня ошибка:

Требуется не менее 3 символов без подстановки в начале шаблона.

Когда я делаю как в документах:

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

Ничего не находит.

Ответы [ 2 ]

1 голос
/ 07 января 2013

Взятые непосредственно из Zend Справочной документации , вы можете использовать:

  • Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength() для запроса минимальной необходимой длины префикса и
  • использовать Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength() чтобы установить его.

Таким образом, мое предложение будет одним из двух:

  1. Установите prefixMinLength в 0, используя Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0) - на основании этого,Ваш оригинальный фрагмент кода должен работать нормально (он работал для моей реализации Zend Lucene)

  2. Как вы сами предложили, проверьте все поисковые запросы, используя javascript или иным образом, чтобы убедиться, что есть минимум Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength() перед использованием любых подстановочных знаков (я рекомендую запросить вместо того, чтобы по умолчанию использовать значение «3», чтобы проверка была гибкой)

1 голос
/ 25 июля 2011

Я не правильно, но это работа для меня:

Итак, в моем случае запрос не выполняется, потому что он содержит <3 символа или несколько специальных символов, поэтому в моем поисковом действии: </p>

 public function executeAds(sfWebRequest $request)
  {
      if (!$query = $request->getParameter('query'))
    {
      return $this->forward('search', 'adssearch');
    }

   $query = str_replace(" ", "", $query);
   $query = preg_replace("/[^A-Za-z0-9]/","",$query);
    if (strlen(trim($query))<3)

    {
         $this->redirect('search/notice');
    }

    $this->ads = Doctrine_Core::getTable('Ads') ->getAdsLuceneQuery($query); 

Я не пользуюсь

$pattern = new Zend_Search_Lucene_Index_Term($query.'*');
$query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
$hits = self::getLuceneIndex()->find($query);

Потому что это не работа для меня.

...