/** * This function returns an array of highlighted key-value pairs. * * @param maxFields - the number of highlighted fields to return, 0 = all * * @return array of key value pairs */ public function getHighlightedHitText($maxFields = 0) { $ret = array(); $highlights = $this->elasticaResult->getHighlights(); if (!empty($highlights) && is_array($highlights)) { $highlighter = new SugarSearchEngineHighlighter(); $highlighter->setModule($this->getModule()); $ret = $highlighter->processHighlightText($highlights); if ($maxFields > 0) { $ret = array_slice($ret, 0, $maxFields); } } return $ret; }
/** * Returns an array of fields that matched search query * * @param array $args Api arguments * @param array $record Search result formatted from bean into array form * @param int $maxFields Number of highlighted fields to return, 0 = all * * @return array matched fields key value pairs */ protected function getMatchedFields($args, $record, $maxFields = 0) { $query = $args['q']; $searchFields = explode(',', $args['search_fields']); $matchedFields = array(); foreach ($searchFields as $searchField) { if (!isset($record[$searchField])) { continue; } $fieldValues = array(); if ($searchField === 'email') { //can be multiple email addresses foreach ($record[$searchField] as $email) { $fieldValues[] = $email['email_address']; } } elseif (is_string($record[$searchField])) { $fieldValues = array($record[$searchField]); } foreach ($fieldValues as $fieldValue) { if (stripos($fieldValue, $query) !== false) { $matchedFields[$searchField] = array($fieldValue); } } } $ret = array(); if (!empty($matchedFields) && is_array($matchedFields)) { $highlighter = new SugarSearchEngineHighlighter(); $highlighter->setModule($record['_module']); $ret = $highlighter->processHighlightText($matchedFields); if ($maxFields > 0) { $ret = array_slice($ret, 0, $maxFields); } } return $ret; }