Exemplo n.º 1
0
 /**
  *
  * @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;
 }
Exemplo n.º 2
0
 /**
  * Выполнить первую задачу из очереди
  * @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);
 }
Exemplo n.º 3
0
 /**
  *
  */
 public function __construct()
 {
     $this->crawler = new nc_search_indexer_crawler();
     $this->index = nc_search::get_provider();
 }
Exemplo n.º 4
0
<?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);
Exemplo n.º 5
0
<?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) Парсеры
Exemplo n.º 6
0
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');