[ 'DIV' => 'index', 'TAB' => GetMessage('SEARCH_OPTIONS_TAB_INDEX'), 'ICON' => 'search_settings', 'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_INDEX_2'), 'OPTIONS' => [ 'max_file_size' => [GetMessage('SEARCH_OPTIONS_REINDEX_MAX_SIZE'), ['text', 6]], 'include_mask' => [GetMessage('SEARCH_OPTIONS_MASK_INC'), ['text', 60]], 'exclude_mask' => [GetMessage('SEARCH_OPTIONS_MASK_EXC'), ['textarea', 5]], 'page_tag_property' => [GetMessage('SEARCH_OPTIONS_PAGE_PROPERTY'), ['text', 'tags']], ] ], 1 => [ 'DIV' => 'stemming', 'TAB' => GetMessage('SEARCH_OPTIONS_TAB_STEMMING'), 'ICON' => 'search_settings', 'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_STEMMING'), 'OPTIONS' => [ 'use_stemming' => [GetMessage('SEARCH_OPTIONS_USE_STEMMING'), ['checkbox', 'N']], 'agent_stemming' => [GetMessage('SEARCH_OPTIONS_AGENT_STEMMING'), ['checkbox', 'N']], 'agent_duration' => [GetMessage('SEARCH_OPTIONS_AGENT_DURATION'), ['text', 6]], 'full_text_engine' => [GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE'), ['select', [ 'bitrix' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_BITRIX'), 'sphinx' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_SPHINX'), 'opensearch' => GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_OPENSEARCH'), ]]], 'letters' => [GetMessage('SEARCH_OPTIONS_LETTERS'), ['text', 45], 'bitrix'], 'sphinx_connection' => [GetMessage('SEARCH_OPTIONS_SPHINX_CONNECTION'), ['text', 45], 'sphinx'], 'sphinx_index_name' => [GetMessage('SEARCH_OPTIONS_SPHINX_INDEX_NAME'), ['text', 45], 'sphinx'], 'sphinx_note' => ['', ['note', '
#sphinx.conf
index bitrix
{
#main settings
type = rt
path = /var/lib/sphinxsearch/data/bitrix
docinfo = inline
#choose appropriate type of morphology to use
#morphology = lemmatize_ru_all, lemmatize_en_all, lemmatize_de_all, stem_enru
morphology = stem_enru, soundex
#these settings are used by bitrix:search.title component
dict = keywords
prefix_fields = title
infix_fields=
min_prefix_len = 2
enable_star = 1
#all fields must be defined exactly as followed
rt_field = title
rt_field = body
rt_attr_uint = module_id
rt_attr_string = module
rt_attr_uint = item_id
rt_attr_string = item
rt_attr_uint = param1_id
rt_attr_string = param1
rt_attr_uint = param2_id
rt_attr_string = param2
rt_attr_timestamp = date_change
rt_attr_timestamp = date_to
rt_attr_timestamp = date_from
rt_attr_uint = custom_rank
rt_attr_multi = tags
rt_attr_multi = right
rt_attr_multi = site
rt_attr_multi = param
#depends on settings of your site
# uncomment for single byte character set
charset_type = sbcs
# uncomment for UTF character set
#charset_type = utf-8
}
'
], 'sphinx'],
'mysql_note' => ['', ['note', GetMessage('SEARCH_OPTIONS_MYSQL_NOTE')], 'mysql'],
'opensearch_connection' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_CONNECTION'), ['text', 45], 'opensearch'],
'opensearch_user' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_USER'), ['text', 45], 'opensearch'],
'opensearch_password' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_PASSWORD'), ['password', 45], 'opensearch'],
'opensearch_index' => [GetMessage('SEARCH_OPTIONS_OPENSEARCH_INDEX'), ['text', 45], 'opensearch'],
'opensearch_analyzer' => ['', ['note', GetMessage('SEARCH_OPTIONS_OPENSEARCH_ANALYZER_NOTE')], 'opensearch'],
]
],
2 => [
'DIV' => 'search',
'TAB' => GetMessage('SEARCH_OPTIONS_TAB_SEARCH'),
'ICON' => 'search_settings',
'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_SEARCH'),
'OPTIONS' => [
'max_result_size' => [GetMessage('SEARCH_OPTIONS_MAX_RESULT_SIZE'), ['text', 6]],
'max_body_size' => [GetMessage('SEARCH_OPTIONS_MAX_BODY_SIZE'), ['text', 6]],
'use_tf_cache' => [GetMessage('SEARCH_OPTIONS_USE_TF_CACHE'), ['checkbox', 'N']],
'use_word_distance' => [
GetMessage('SEARCH_OPTIONS_USE_WORD_DISTANCE'),
['checkbox', 'N'],
],
'use_social_rating' => [
GetMessage('SEARCH_OPTIONS_USE_SOCIAL_RATING'),
['checkbox', 'N'],
],
'suggest_save_days' => [GetMessage('SEARCH_OPTIONS_SUGGEST_SAVE_DAYS'), ['text', 6]],
]
],
3 => [
'DIV' => 'statistic',
'TAB' => GetMessage('SEARCH_OPTIONS_TAB_STATISTIC'),
'ICON' => 'search_settings',
'TITLE' => GetMessage('SEARCH_OPTIONS_TAB_TITLE_STATISTIC'),
'OPTIONS' => [
'stat_phrase' => [GetMessage('SEARCH_OPTIONS_STAT_PHRASE'), ['checkbox', 'Y']],
'stat_phrase_save_days' => [GetMessage('SEARCH_OPTIONS_STAT_PHRASE_SAVE_DAYS'), ['text', 6]],
]
],
];
$DBsearch = CDatabase::GetModuleConnection('search');
if ($DBsearch->type === 'MYSQL')
{
$aTabs[1]['OPTIONS']['full_text_engine'][1][1]['mysql'] = GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_MYSQL');
}
elseif ($DBsearch->type === 'PGSQL')
{
$aTabs[1]['OPTIONS']['full_text_engine'][1][1]['pgsql'] = GetMessage('SEARCH_OPTIONS_FULL_TEXT_ENGINE_PGSQL');
}
$siteLangMap = [];
$langs = CLang::GetList();
while ($site = $langs->Fetch())
{
$siteLangMap[$site['ID']] = $site['LANGUAGE_ID'];
$aTabs[1]['OPTIONS']['opensearch_analyzer_' . $site['ID']] = [
GetMessage('SEARCH_OPTIONS_OPENSEARCH_ANALYZER_FOR_SITE', ['#SITE_ID#' => $site['ID']]),
['select', array_combine(array_keys($openSearchAnalyzers), array_keys($openSearchAnalyzers))],
'opensearch',
];
}
$tabControl = new CAdminTabControl('tabControl', $aTabs);
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $Update . $Apply . $RestoreDefaults <> '' && check_bitrix_sessid())
{
if ($RestoreDefaults <> '')
{
COption::RemoveOption('search');
}
else
{
if ($_POST['full_text_engine'] === 'sphinx')
{
$search = new CSearchSphinx();
if (!$search->connect($_POST['sphinx_connection'], $_POST['sphinx_index_name'], true))
{
$e = $APPLICATION->GetException();
if (is_object($e))
{
$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_SPHINX_ERROR'), $e);
}
$bVarsFromForm = true;
}
}
elseif ($_POST['full_text_engine'] === 'opensearch')
{
$siteAnalyzerMap = [];
foreach ($_POST as $key => $value)
{
if (str_starts_with($key, 'opensearch_analyzer_'))
{
$siteAnalyzerMap[explode('_', $key, 3)[2]] = $value;
}
}
$search = new CSearchOpenSearch();
$opensearch_password = $_POST['opensearch_password'] ?: CPasswordStorage::Get('search@opensearch_password');
if (!$search->connect($_POST['opensearch_connection'], $_POST['opensearch_user'], $opensearch_password, $_POST['opensearch_index'], true, $siteAnalyzerMap))
{
$e = $APPLICATION->GetException();
if (is_object($e))
{
$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_OPENSEARCH_ERROR'), $e);
}
$bVarsFromForm = true;
}
}
elseif ($_POST['full_text_engine'] === 'mysql')
{
$search = new CSearchMysql();
if (!$search->connect())
{
$e = $APPLICATION->GetException();
if (is_object($e))
{
$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_MYSQL_ERROR'), $e);
}
$bVarsFromForm = true;
}
}
elseif ($_POST['full_text_engine'] === 'pgsql')
{
$search = new CSearchPgsql();
if (!$search->connect())
{
$e = $APPLICATION->GetException();
if (is_object($e))
{
$message = new CAdminMessage(GetMessage('SEARCH_OPTIONS_PGSQL_ERROR'), $e);
}
$bVarsFromForm = true;
}
}
if (!$bVarsFromForm)
{
$old_use_tf_cache = COption::GetOptionString('search', 'use_tf_cache');
$old_max_result_size = COption::GetOptionInt('search', 'max_result_size');
$old_full_text_engine = COption::GetOptionString('search', 'full_text_engine');
foreach ($aTabs as $i => $aTab)
{
foreach ($aTab['OPTIONS'] as $name => $arOption)
{
$val = $_POST[$name];
if ($arOption[1][0] == 'checkbox' && $val != 'Y')
{
$val = 'N';
}
if ($arOption[1][0] == 'password')
{
if ($val)
{
CPasswordStorage::Set('search@' . $name, $val);
}
}
else
{
COption::SetOptionString('search', $name, $val, $arOption[0]);
}
}
}
if (
$old_use_tf_cache != COption::GetOptionString('search', 'use_tf_cache')
|| $old_max_result_size != COption::GetOptionInt('search', 'max_result_size')
)
{
$DBsearch->Query('TRUNCATE TABLE b_search_content_freq');
}
if ($old_full_text_engine != COption::GetOptionString('search', 'full_text_engine'))
{
$error = [
'MESSAGE' => GetMessage("SEARCH_OPTIONS_FULL_REINDEX", ['#LINK#' => '/bitrix/admin/search_reindex.php?lang=' . LANGUAGE_ID]),
'TAG' => 'SEARCH_REINDEX',
'MODULE_ID' => 'SEARCH',
'NOTIFY_TYPE' => CAdminNotify::TYPE_ERROR,
];
CAdminNotify::Add($error);
}
}
}
CSearchStatistic::SetActive(COption::GetOptionString('search', 'stat_phrase') == 'Y');
if (!$bVarsFromForm)
{
if ($Update <> '' && $_REQUEST['back_url_settings'] <> '')
{
LocalRedirect($_REQUEST['back_url_settings']);
}
else
{
LocalRedirect($APPLICATION->GetCurPage() . '?mid=' . urlencode($mid) . '&lang=' . urlencode(LANGUAGE_ID) . '&back_url_settings=' . urlencode($_REQUEST['back_url_settings']) . '&' . $tabControl->ActiveTabParam());
}
}
}
if (is_object($message))
{
echo $message->Show();
}
$aMenu = [
[
'TEXT' => GetMessage('SEARCH_OPTIONS_REINDEX'),
'LINK' => 'search_reindex.php?lang=' . LANGUAGE_ID,
'TITLE' => GetMessage('SEARCH_OPTIONS_REINDEX_TITLE'),
],
[
'TEXT' => GetMessage('SEARCH_OPTIONS_SITEMAP'),
'LINK' => 'search_sitemap.php?lang=' . LANGUAGE_ID,
'TITLE' => GetMessage('SEARCH_OPTIONS_SITEMAP_TITLE'),
]
];
$context = new CAdminContextMenu($aMenu);
$context->Show();
$tabControl->Begin();
?>