Столкновение с проблемой в zend_search_lucene
Я использую 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);
}
............
Работает нормально здесь:
- Это работает, когда я даю полное слово, первые 3 символа, слова без учета регистра
Мои проблемы:
- Когда я ищу электронную почту, я получаю сообщение об ошибке "
Wildcard search is supported only for non-multiple word terms
" - Когда я ищу номер / дату, как "
1234
" или же09/06/2011
, Я получил сообщение об ошибке типа "В начале шаблона требуется не менее 3 символов без подстановки"
Я хочу найти дату, адрес электронной почты, номер здесь.
2 ответа
Основываясь на предложении НаануМану, я немного покопался, чтобы понять это - я разместил здесь свой ответ на связанный вопрос, но для удобства повторяю:
Взятые непосредственно из справочной документации Zend, вы можете использовать:
Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()
запросить минимально необходимую длину префикса и- использование
Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength()
установить это.
Таким образом, мое предложение будет одним из двух:
Установите префикс MinLength равным 0, используя
Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength(0)
Проверьте все поисковые запросы, используя JavaScript или иным образом, чтобы убедиться, что есть минимум
Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()
перед использованием каких-либо подстановочных знаков (я рекомендую сделать запрос, вместо того, чтобы использовать значение по умолчанию "3", чтобы проверка была гибкой)
В файле zend/search/Lucene/search/search/query/wildcard устанавливается параметр,
private static $_minPrefixLength = 3;
изменить это, и это может работать..!