/** * * @param nc_search_language_corrector_phrase $phrase * @return boolean */ public function correct(nc_search_language_corrector_phrase $phrase) { // init, required $this->analyzer = nc_search_extension_manager::get('nc_search_language_analyzer', $this->context)->first(); // «ПЕРВЫЙ ПОПАВШИЙСЯ»! предполагается, что анализатор вообще-то один $this->provider = nc_search::get_provider(); // для начала определимся, можем ли мы что-то сделать? $unknown_terms = $this->get_unknown_terms($phrase); if (!$unknown_terms) { return false; } // false or empty array $input_count = count($unknown_terms); // этап 2: пробуем исправить слово // раскладка if (nc_search::should('ChangeLayoutOnEmptyResult')) { $unknown_terms = $this->change_keyboard_layout($unknown_terms); } // разбивка на слова if (nc_search::should('BreakUpWordsOnEmptyResult')) { $unknown_terms = $this->break_up_words($unknown_terms); } // fuzzy search if (nc_search::should('PerformFuzzySearchOnEmptyResult') && nc_search::should('AllowFuzzySearch')) { $this->add_fuzzy_search($unknown_terms); $everything_corrected = true; } else { $count = count($unknown_terms); $everything_corrected = $count == 0 || $count < $input_count && nc_search::get_setting('DefaultBooleanOperator') == 'OR'; } return $everything_corrected; }
/** * Выполнить первую задачу из очереди * @param int $indexer_strategy * @return bool|null */ public static function run($indexer_strategy = nc_search::INDEXING_NC_CRON) { $provider = nc_search::get_provider(); if ($provider->is_reindexing()) { nc_search::log(nc_search::LOG_SCHEDULER_START, "Scheduler: indexing in progress"); return false; } $intent = nc_search::load('nc_search_scheduler_intent', 'SELECT * FROM `%t%`' . ' WHERE `StartTime` <= ' . time() . ' ORDER BY `StartTime` ASC LIMIT 1')->first(); if (!$intent) { nc_search::log(nc_search::LOG_SCHEDULER_START, "Scheduler: no scheduler intents to process now"); return false; } if (nc_search::will_log(nc_search::LOG_SCHEDULER_START)) { nc_search::log(nc_search::LOG_SCHEDULER_START, "Scheduler started (planned start time: " . strftime("%Y-%m-%d %H:%M:%S", $intent->get('start_time')) . "; area: '" . preg_replace("/\\s+/u", " ", $intent->get('area_string')) . "')"); } // информация принята к сведению и больше не нужна $intent->delete(); // запуск индексации $provider->index_area($intent->get('area_string'), $indexer_strategy); }
/** * */ public function __construct() { $this->crawler = new nc_search_indexer_crawler(); $this->index = nc_search::get_provider(); }
<?php /** * Входящие параметры: * - term * - language * * @global $catalogue */ $NETCAT_FOLDER = realpath("../../../../"); require_once "{$NETCAT_FOLDER}/vars.inc.php"; require $INCLUDE_FOLDER . "index.php"; // получение параметров $input = trim($nc_core->input->fetch_get('term')); if (!nc_search::should('EnableQuerySuggest') || nc_search::get_setting('SuggestMode') != 'titles' || mb_strlen($input) < nc_search::get_setting('SuggestionsMinInputLength')) { die("[]"); } $input = $nc_core->utf8->conv($nc_core->NC_CHARSET, 'utf-8', $input); $language = $nc_core->input->fetch_get('language'); if (!$language) { $language = $nc_core->lang->detect_lang(1); } // поиск подходящих заголовков is provider-dependent $suggestions = nc_search::get_provider()->suggest_titles($input, $language, $catalogue); if (!$nc_core->NC_UNICODE) { $suggestions = $nc_core->utf8->array_utf2win($suggestions); } print nc_array_json($suggestions);
<?php if (!class_exists("nc_system")) { die; } // if (!nc_search::should('EnableSearch')) { // nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_SETTING_SEARCH_DISABLED, "error", // array($this->hash_href("#module.search.generalsettings"), "_top")); // return; // } $nc_core = nc_core(); $db = $this->get_db(); $provider = nc_search::get_provider(); $is_history_saved = nc_search::should('SaveQueryHistory'); // ----------------------------------------------------------------------------- // Невыполненные задачи $rules = nc_search::load('nc_search_rule', "SELECT * FROM `%t%` ORDER BY `LastStartTime` DESC"); if (count($rules)) { $pending_time = time() - 12 * 60 * 60; $pending_tasks = $db->get_var("SELECT `StartTime`\n FROM `Search_Schedule`\n WHERE `StartTime` < {$pending_time}\n LIMIT 1"); if ($pending_tasks) { $error_message = NETCAT_MODULE_SEARCH_WIDGET_CHECK_CRONTAB; } } else { $error_message = NETCAT_MODULE_SEARCH_WIDGET_NO_RULES; } // Ошибки конфигурации ob_start(); // (1) Индексатор $provider->check_environment(true); // (2) Парсеры
if (!nc_search::should('EnableSearch')) { nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_SETTING_SEARCH_DISABLED, "error", array($this->hash_href("#module.search.generalsettings"), "_top")); return; } $db = $this->get_db(); $provider = nc_search::get_provider(); $is_history_saved = nc_search::should('SaveQueryHistory'); $has_history = $is_history_saved && $db->get_var("SELECT COUNT(*) FROM `Search_Query` LIMIT 1"); $num_queries = 5; // сколько последних/популярных запросов выводить в статистике $queries_period = "`Timestamp` > (NOW() - INTERVAL 3 MONTH)"; // учитывать только эти запросы в списке популярных // ----------------------------------------------------------------------------- // ОБЩИЕ ПРЕДУПРЕЖДЕНИЯ // Индексатор nc_search::get_provider()->check_environment(); // Парсеры $parser_context = new nc_search_context(array('search_provider' => nc_search::get_setting('SearchProvider'))); $all_parsers = nc_search_extension_manager::get('nc_search_document_parser', $parser_context)->get_all(); foreach ($all_parsers as $parser) { $parser->check_environment(); } // Невыполненные задачи $rules = nc_search::load('nc_search_rule', "SELECT * FROM `%t%` ORDER BY `LastStartTime` DESC")->set_output_encoding(nc_core('NC_CHARSET')); if (!count($rules)) { nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_NO_RULES, 'info', array($this->hash_href("#module.search.rules_edit"))); } else { $pending_time = time() - 12 * 60 * 60; $pending_tasks = $db->get_var("SELECT `StartTime` FROM `Search_Schedule` WHERE `StartTime` < {$pending_time} LIMIT 1"); if ($pending_tasks) { nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_STAT_CHECK_CRONTAB, 'error');