Перед проблемой в Zend_search_lucene - PullRequest
0 голосов
/ 25 июля 2011

Я использую Zend Lucene Search:

    ......
    $results = $test->fetchAll();

                   setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
          Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
                foreach ($results as $result) {
                    $doc = new Zend_Search_Lucene_Document();

                    // add Fields
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testid', $result->id));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Keyword('testemail', strtolower(($result->email))));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testconfirmdate', $result->confirmdate));
                    $doc->addField(
                            Zend_Search_Lucene_Field::Text('testcreateddate', $result->createddate));
                    // Add document to the index
                    $index->addDocument($doc);
                }
                // Optimize index.
                $index->optimize();

                // Search by query
                setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
                if(strlen($Data['name']) > 2){
                    //$query = Zend_Search_Lucene_Search_QueryParser::parse($Data['name'].'*');
                                    $pattern = new Zend_Search_Lucene_Index_Term($Data['name'].'*');
                                    $query = new Zend_Search_Lucene_Search_Query_Wildcard($pattern);
                                    $this->view->hits = $index->find(strtolower($query));
                            }
                else{
                    $query  = $Data['name'];
                                    $this->view->hits = $index->find($query);
                                }
............

Здесь отлично работает:

  1. Работает, когда я даю полное слово, первые 3 символа, слова без учета регистра

Мои проблемы:

  1. Когда я ищу электронную почту, я получаю сообщение об ошибке типа "Wildcard search is supported only for non-multiple word terms"
  2. Когда я ищу номер / дату типа "1234 "или 09/06/2011, я получил сообщение об ошибке" Не менее 3 символов без подстановки необходимы в начале шаблона "

Я хочу найти дату, адрес электронной почты и номер здесь.

Ответы [ 2 ]

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

Основываясь на предложении НаануМану, я немного покопался, чтобы выяснить это - я разместил свой ответ на связанный вопрос здесь , но для удобства повторяю:

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

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

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

  1. Установите префикс MinLength на 0, используя Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0)

  2. Проверьте все поисковые запросы, используя javascript или иным образом, чтобы убедиться, что существует минимум Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength() перед использованием любых подстановочных знаков (я рекомендую запрашивать это вместо того, чтобы принять значение по умолчанию "3", чтобы проверка была гибкой) *

0 голосов
/ 29 мая 2012

В файле zend / search / Lucene / search / search / query / wildcard указан параметр,

private static $_minPrefixLength = 3;

изменяй это, и это может сработать ..!

...