Я пытаюсь реализовать Zend_Search_Lucene
. Я реализовал это со следующим условием:
- ** Поиск слова 1005 *
- 1007 * Поиск слова *
- без учета регистра
Но иногда я получаю сообщение об ошибке "Wildcard search is supported only for non-multiple word terms
"
Ниже приведен фрагмент кода для поиска, который я взял из контроллера.
...
$browseSrArray = array();
if ($postData['name'])
$browseSrArray['name'] = preg_replace('#[^\w()/.%\-&]#', "", $postData['name']);
$results = $manufacturers->browseSearch($browseSrArray);
if(count($results)>0){
foreach ($results as $result) {
$doc = new Zend_Search_Lucene_Document();
// add Fields
$doc->addField(Zend_Search_Lucene_Field::Keyword('AccountNumber', $result['accountid']));
$doc->addField(Zend_Search_Lucene_Field::Keyword('ManufacturesName', strtolower($result['name'])));
$doc->addField(Zend_Search_Lucene_Field::Text('ContactName', $result['contact_name']));
$doc->addField(Zend_Search_Lucene_Field::Keyword('EmailId', strtolower($result['email'])));
$doc->addField( Zend_Search_Lucene_Field::Text('ManufacturesId', $result['manufacturer_id']));
$doc->addField(Zend_Search_Lucene_Field::Text('Manufacturesstatus', $result['status']));
// Add document to the index
$index->addDocument($doc);
}
// Optimize index.
$index->optimize();
if(strlen($postData['name']) > 2)
$query = Zend_Search_Lucene_Search_QueryParser::parse(strtolower($postData['name'].'*'));
else
$query = $postData['name'];
// Search by query
$this->view->hits = $index->find(strtolower($query));
} else {
$this->view->hits = 0;
}
...
Необходимо исправить следующее условие.
Например,
- Если у меня имя производителя как "
testname-lastname
", я получаю эту ошибку.
- Если у меня есть название производителя как "
firstname lastname
", я не получу точный LIKE результат от lucence при поиске фамилии.
Пожалуйста, помогите мне исправить это.