好的,所以假设我有一个搜索查询给我一些Zend_Search_Lucene_Search_QueryHit对象,其中包含与查询匹配的Zend_Search_Lucene_Document对象。 我有一个小问题,如何从匹配查询str的文档中简单地检索字段的名称,以突出显示它? 我希望一切都清楚,不要明显解决:))... 非常感谢 亚历克斯
答案 0 :(得分:0)
假设“name”,“address”,“phone”是您的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并称之为“excerpt”
$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
}