From: Victor E. (@kroky) <gi...@mg...> - 2024-10-02 10:43:29
|
Victor Emanouilov pushed to branch master at Tiki Wiki CMS Groupware / Tiki Commits: 273c9b90 by Victor Emanouilov at 2024-10-02T13:43:05+03:00 [FIX] manticore/mysql index optimization: include object_id/type and partially revert this change in search lookup controller as it needs field types like _text and _paths - - - - - 3 changed files: - lib/core/Search/MySql/Index.php - lib/core/Search/Query.php - lib/core/Services/Search/Controller.php Changes: ===================================== lib/core/Search/MySql/Index.php ===================================== @@ -133,10 +133,10 @@ class Search_MySql_Index implements Search_Index_Interface $order = $this->getOrderClause($query, (bool) $scoreFields); if ($selectFields = $query->getSelectionFields()) { - $selectFields = array_map(function($field) { + $selectFields = array_map(function ($field) { return $this->tfTranslator->shortenize($field); }, $selectFields); - } else { + } else { $selectFields = $this->table->all(); } ===================================== lib/core/Search/Query.php ===================================== @@ -52,6 +52,12 @@ class Search_Query implements Search_Query_Interface public function setSelectionFields(array $fields) { + if (! in_array('object_type', $fields)) { + $fields[] = 'object_type'; + } + if (! in_array('object_id', $fields)) { + $fields[] = 'object_id'; + } $this->selectionFields = $fields; } ===================================== lib/core/Services/Search/Controller.php ===================================== @@ -187,9 +187,7 @@ class Services_Search_Controller /** @var UnifiedSearchLib $lib */ $lib = TikiLib::lib('unifiedsearch'); - $format_pattern = '/\{([\w\.]+)\}/'; - - if (! empty($filter['title']) && preg_match_all($format_pattern, $format, $matches)) { + if (! empty($filter['title']) && preg_match_all('/\{(\w+)\}/', $format, $matches)) { // formatted object_selector search results should also search in formatted fields besides the title $titleFilter = $filter['title']; unset($filter['title']); @@ -217,18 +215,14 @@ class Services_Search_Controller $query->setOrder($input->sort_order->text() ?: 'title_asc'); $query->setRange($input->offset->int(), $input->maxRecords->int() ?: $prefs['maxRecords']); - if (preg_match_all($format_pattern, $format, $m)) { - $query->setSelectionFields($m[1]); - } - $result = $query->search($lib->getIndex()); - $result->applyTransform(function ($item) use ($format, $format_pattern, $smarty, $titleFilter, $highlightHelper, $use_permname) { + $result->applyTransform(function ($item) use ($format, $smarty, $titleFilter, $highlightHelper, $use_permname) { $transformed = [ 'object_type' => $item['object_type'], 'object_id' => $use_permname != 'y' ? $item['object_id'] : (TikiLib::lib('trk')->get_field_info($item['object_id'])['permName'] ?? $item['object_id']), 'parent_id' => $item['gallery_id'], - 'title' => preg_replace_callback($format_pattern, function ($matches) use ($item, $format, $titleFilter, $highlightHelper) { + 'title' => preg_replace_callback('/\{([\w\.]+)\}/', function ($matches) use ($item, $format, $titleFilter, $highlightHelper) { $key = $matches[1]; if (isset($item[$key])) { // if this is a trackeritem we do not want only the name but also the trackerid listed when setting up a field View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/273c9b90b308e78be5d60a9ff849e90ea1d5dbc8 -- View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/273c9b90b308e78be5d60a9ff849e90ea1d5dbc8 You're receiving this email because of your account on gitlab.com. |