• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/mysql/search.php
  • Класс: CSearch
  • Вызов: CSearch::IndexTitle
static function IndexTitle($arLID, $ID, $sTitle)
{
	$DB = CDatabase::GetModuleConnection('search');
	static $CACHE_SITE_LANGS = array();
	$ID = intval($ID);

	$arLang = array();
	if (!is_array($arLID))
		$arLID = Array();
	foreach ($arLID as $site => $url)
	{
		$sql_site = $DB->ForSql($site);

		if (!array_key_exists($site, $CACHE_SITE_LANGS))
		{
			$db_site_tmp = CSite::GetByID($site);
			if ($ar_site_tmp = $db_site_tmp->Fetch())
				$CACHE_SITE_LANGS[$site] = array(
					"LANGUAGE_ID" => $ar_site_tmp["LANGUAGE_ID"],
					"CHARSET" => $ar_site_tmp["CHARSET"],
					"SERVER_NAME" => $ar_site_tmp["SERVER_NAME"]
				);
			else
				$CACHE_SITE_LANGS[$site] = false;
		}

		if (is_array($CACHE_SITE_LANGS[$site]))
		{
			$lang = $CACHE_SITE_LANGS[$site]["LANGUAGE_ID"];

			$dbTitle = [];
			$rs = $DB->Query("select WORD, POS from b_search_content_title where SEARCH_CONTENT_ID = ".$ID." and SITE_ID='".$sql_site."'");
			while ($ar = $rs->Fetch())
			{
				$dbTitle[$ar["WORD"]] = intval($ar["POS"]);
			}

			$arTitle = stemming_split($sTitle, $lang);
			if (!empty($arTitle))
			{
				$maxValuesLen = 2048;
				$strSqlPrefix = "
						insert ignore into b_search_content_title
						(SEARCH_CONTENT_ID, SITE_ID, WORD, POS)
						values
				";
				$strSqlValues = "";
				$strSqlSuffix = "";
				foreach ($arTitle as $word => $pos)
				{
					if (isset($dbTitle[$word]) && $dbTitle[$word] === $pos)
					{
						//Already in the db
						unset($dbTitle[$word]);
					}
					else
					{
						//New value
						$strSqlValues .= ",n(".$ID.", '".$sql_site."', '".$DB->ForSql($word)."', ".$pos.")";
						if (mb_strlen($strSqlValues) > $maxValuesLen)
						{
							$DB->Query($strSqlPrefix.mb_substr($strSqlValues, 2), false, "File: ".__FILE__."
Line: ".__LINE__); $strSqlValues = ""; } } } if ($strSqlValues <> '') { $DB->Query($strSqlPrefix.mb_substr($strSqlValues, 2), false, "File: ".__FILE__."
Line: ".__LINE__); $strSqlValues = ""; } //Delete obsolete db values foreach ($dbTitle as $word => $pos) { $DB->Query(" delete from b_search_content_title where SEARCH_CONTENT_ID = ".$ID." and SITE_ID='".$sql_site."' and WORD = '".$DB->ForSql($word)."' and POS = ".$pos." "); } } } } }