Предполагая, что "имя", "адрес", "телефон" являются вашими полями типа Zend_Search_Lucene_Field :: Text, и у вас есть одно поле Zend_Search_Lucene_Field :: Unstored с именем "content". Это можно легко решить с помощью " strpos":
$hits = $index->find($query);
foreach ($hits as $hit) {
$result = array();
if (strpos($hit->name , $query)) {
$result[$hit->id]['name'] = $query->highlightMatches($hit->name)
} else {
$result[$hit->id]['name'] = $hit->name
}
if (strpos($hit->address, $query)) {
$result[$hit->id]['address'] = $query->highlightMatches($hit->address)
} else {
$result[$hit->id]['address'] = $hit->address
}
if (strpos($hit->phone, $query)) {
$result[$hit->id]['phone'] = $query->highlightMatches($hit->phone)
} else {
$result[$hit->id]['phone'] = $hit->phone
}
}
поле вашего телефона может быть ключевым словом Zend_Search_Lucene_Field :: или чем-то еще. если ни одно из этих предыдущих полей не было выделено, это означает, что в вашем контенте была найдена строка $ query, которая не сохранена, поскольку это поле Zend_Search_Lucene_Field :: Unstored. то, что вам нужно сделать, это добавить другое поле типа Zend_Search_Lucene_Field :: Text в ваш $ doc и назвать его «отрывком»
$doc->addField(Zend_Search_Lucene_Field::Text('excerpt', substr($content, 0, 100)));
и добавьте это к вам в предыдущем цикле "foreach"
if (strpos($hit->excerpt, $query)) {
$result[$hit->id]['excerpt'] = $query->highlightMatches($hit->excerpt)
} else {
$result[$hit->id]['excerpt'] = $hit->excerpt
}