Меню

Ошибка b search content stem

Способы исправления ошибок, выявленных при полном тестировании системы в 1С-Битрикс

Модули веб-сервера

Ошибка: Загружен модуль mod_dav/mod_dav_fs, WebDav не будет работать
Решение: Удалите файл /etc/httpd/conf.modules.d/00-dav.conf

Размер стека и pcre.recursion_limit

Ошибка: Замечание. Возможны проблемы в работе с длинными строками из-за системных ограничений
Решение: Как правило, для корректной работы 1С-Битрикс требуется снижение значения pcre.recursion_limit до 1000. Для этого нужно прописать правило в файле php.ini или в .htaccess, если у вас виртуальный хостинг и нет доступа к настройкам сервера.

VDS хостинг

  1. В файле /etc/php.d/bitrixenv.ini изменим параметр:
    pcre.recursion_limit=100000
  2. В скрипте запуска сервера HTTP Apache /etc/rc.d/init.d/httpd изменим функцию start(), добавив в нее одну строку ulimit -s unlimited
  3. В итоге должно получиться примерно следующее:
    start() {
      echo -n $"Starting $prog: "
      ulimit -s unlimited
      LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
      RETVAL=$?
      echo
      [ $RETVAL = 0 ] && touch ${lockfile}
      return $RETVAL
    }

Виртуальный хостинг

Для виртуального хостинга в файле .htaccess

php_value pcre.recursion_limit 100000

Режим работы MySQL

Ошибка: innodb_strict_mode=ON, требуется OFF
Решение: После обновления 1C-Битрикс, а конкретно модуля main 19.0.400 добавилась новая проверка. Исправление выйдет в следующих версиях BitrixVM. А сейчас можно исправить так:

Вариант 1

  1. Подключиться к серверу под root
  2. Открыть один из файлов (у всех могут быть разные, варианты)
    • /etc/my.cnf
    • /etc/alternatives/my.cnf
    • /etc/bitrix-my.cnf
  3. Добавить строку в блоке # InnoDB parameters
    innodb_strict_mode = OFF

Вариант 2

  1. В файл after_connect.php добавить:
    $DB->Query("SET innodb_strict_mode='OFF'");
  2.  В файл after_connect_d7.php добавить:
    $connection->queryExecute("SET innodb_strict_mode='OFF'");

Структура базы данных

Ошибка: В таблице b_search_content_stem поле STEM «varchar(50) NOT NULL» не соответствует описанию на диске «int(11) NOT NULL»
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: В таблице b_search_content_freq поле STEM «varchar(50) NOT NULL DEFAULT «» » не соответствует описанию на диске «int(11) NOT NULL DEFAULT «0» «
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: Структура базы данных: Ошибочный ответ сервера. Не удалось завершить тестирование.
Решение: В файле /bitrix/modules/main/install/mysql/install.sql найти строку:

INDEX ix_module_to_module(FROM_MODULE_ID, MESSAGE_ID, TO_MODULE_ID, TO_CLASS, TO_METHOD)

и заменить на:

INDEX ix_module_to_module(FROM_MODULE_ID(20), MESSAGE_ID(20), TO_MODULE_ID(20), TO_CLASS(20), TO_METHOD(20))

Ошибка: В таблице b_user_hit_auth поле TIMESTAMP_X «datetime NULL DEFAULT NULL » не соответствует описанию на диске «timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP»
Решение: Выполнить запрос в Настройки → Инструменты → SQL запрос:

ALTER TABLE `b_user_hit_auth` MODIFY `TIMESTAMP_X` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;

Содержание

  1. Ошибки при проверке системы в Битрикс
  2. Модули веб-сервера
  3. Размер стека и pcre.recursion_limit
  4. VDS хостинг
  5. Виртуальный хостинг
  6. Режим работы MySQL
  7. Вариант 1
  8. Вариант 2
  9. Структура базы данных
  10. Проверка системы (check_socket): Fail
  11. Здравствуйте у меня проблема при проверки системы. Permission denied: BITRIX SESSID
  12. 8 ответов
  13. Похожие вопросы
  14. Алена Мохова (Все сообщения пользователя)
  15. Переустановил сервер сайта, поднял сайт запускаю проверку доступа — получаю Permission denied:
  16. 5 ответов
  17. Похожие вопросы

Ошибки при проверке системы в Битрикс

Модули веб-сервера

Ошибка: Загружен модуль mod_dav/mod_dav_fs, WebDav не будет работать
Решение: Удалите файл /etc/httpd/conf.modules.d/00-dav.conf

Размер стека и pcre.recursion_limit

VDS хостинг

  1. В файле /etc/php.d/bitrixenv.ini изменим параметр:
  2. В скрипте запуска сервера HTTP Apache /etc/rc.d/init.d/httpd изменим функцию start(), добавив в нее одну строку ulimit -s unlimited
  3. В итоге должно получиться примерно следующее:

Виртуальный хостинг

Для виртуального хостинга в файле .htaccess

Режим работы MySQL

Вариант 1

  1. Подключиться к серверу под root
  2. Открыть один из файлов (у всех могут быть разные, варианты)
    • /etc/my.cnf
    • /etc/alternatives/my.cnf
    • /etc/bitrix-my.cnf
  3. Добавить строку в блоке # InnoDB parameters

Вариант 2

  1. В файл after_connect.php добавить:
  2. В файл after_connect_d7.php добавить:

Структура базы данных

Ошибка: В таблице b_search_content_stem поле STEM «varchar(50) NOT NULL» не соответствует описанию на диске «int(11) NOT NULL»
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: В таблице b_search_content_freq поле STEM «varchar(50) NOT NULL DEFAULT «» » не соответствует описанию на диске «int(11) NOT NULL DEFAULT «0» «
Решение: Удалить модуль поиска вместе с таблицами и Заново установить модуль поиска и переиндексировать сайт.

Ошибка: Структура базы данных: Ошибочный ответ сервера. Не удалось завершить тестирование.
Решение: В файле /bitrix/modules/main/install/mysql/install.sql найти строку:
и заменить на:

Ошибка: В таблице b_user_hit_auth поле TIMESTAMP_X «datetime NULL DEFAULT NULL » не соответствует описанию на диске «timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP»
Решение: Выполнить запрос в Настройки → Инструменты → SQL запрос:

Источник

Проверка системы (check_socket): Fail

Подскажите, пожалуйста, как решить проблему?

Журнал проверки системы
2020-Sep-09 23:23:14 Наличие необходимых модулей php (check_php_modules): Ok
Все необходимые модули установлены
2020-Sep-09 23:23:14 Обязательные параметры PHP (check_php_settings): Ok
Настройки правильные
2020-Sep-09 23:23:14 Модули веб-сервера (check_security): Ok
Конфликтов не выявлено
2020-Sep-09 23:23:14 Значения переменных сервера (check_server_vars): Ok
Корректные
2020-Sep-09 23:23:14 Сохранение сессии (check_session): Ok
50% done
2020-Sep-09 23:23:14 Сохранение сессии (check_session): Ok
Успешно
2020-Sep-09 23:23:14 Параметры настройки UTF (mbstring и константа BX_UTF) (check_mbstring): Ok
Правильные. Сайт работает в UTF кодировке
2020-Sep-09 23:23:14 Служебные скрипты в корне сайта (check_install_scripts): Ok
Отсутствуют
2020-Sep-09 23:23:14 Работа с сокетами (check_socket): Fail
Connection to ssl://bx24.мой домен.pro:443 Success
== Request ==
GET /bitrix/admin/site_checker.php?test_type=socket_test&unique_id=мой id HTTP/1.1
Host: bx.мой домен.pro

== Response ==
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Wed, 09 Sep 2020 20:23:14 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 34
Connection: keep-alive
Vary: HTTPS
X-Powered-By: PHP/7.2.28
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN

== Body ==
Permission denied: UNIQUE ID ERROR
==========

Источник

Здравствуйте у меня проблема при проверки системы. Permission denied: BITRIX SESSID

ERROR не подскажете куда посмотреть? А вообще у меня проблема что сайт отдает форму авторизации вместо сайта. Аксес файл есть, вроде все норм

8 ответов

не так настроили многосайтовость или в корне сайта нет .access.php

значит косяк с многосайтом

в двух словах куда именно посмотреть, а то переносил ажмин который не знает битрикса но переносил с живого

чистите также куки, когда меняете.. а том может быть, что уже исправили, но сессия косячит

да про кукисы видел в инете, чистил

настройки сайтов первым делом dbcon в php_interface может там определяется сайт своим алгоритмом настройки хостинга, наличие симлинков с правильным владельцем

сейчас все провер, но насчет владельцая еще вчера на него думал, не подскажете какой он должен быть

Похожие вопросы

Добрый день Я как-то делал подарочные сертификаты на битриксе, были они сделаны таким образом, что каждый сертификат — это по сути отдельная сущность, ну типа сертификат на 50.

А как можно при помощи регулярного выражения заменить пробел перед цифрой на неразрывный?

Всем привет. Есть немного нетривиальная задачка, второй день ломаю голову. Есть инфоблок с подборками, в элементах которого указывается url страницы с отфильтрованными товар.

в плане? переиспользовать купон не получится

Друзья, как вызвать связанные товары по ID в catalog:section? Сейчас при поиске по сайту перекидывает на страницу с искомым товаром. После этого товара нужно вывести связанны.

Здравствуйте. Что означает @ и точка в ключе, когда делаем выборку?

народ, такой вопрос — можно ли с одного проекта дернуть модуль в другой?Или он к ключу привязывается?

ну всмысле я понимаю откуда и куда дергать модули, дальнейшие действия какие?

а кто нибудь может объяснить в чем прикол битрикса24?Судя по всему там тоже есть интернет магазин но с функционалом CRM?Он как то удобней обычного битрикса?Написан с 0 на друг.

Источник

Алена Мохова (Все сообщения пользователя)

Есть интернет-магазин на битриксе, нам необходимо сделать так, чтобы другой сайт смог во фрейме отобразить этот. Но при попытке это сделать возникает ошибка в консоли:

В итоге скрипты с сайта вообще не подгружаются и не работают. Пробовали грузить во фрейм другие сайты, на них все было хорошо. Сделали вывод что что-то не так именно у нас.

Возможно кто-то знает как решить эту проблему.

Нашла на форуме похожую проблему http://dev.1c-bitrix.ru/support/forum/forum6/topic69248/ но решения там не увидела.

Настраиваю подписку на сайте — не авторизованные пользователи вписывают свой емэйл, им на почту приходит письмо о подписке, они ее подтверждают и в битрикс это все хорошо записывается.
Но почему-то самой рассылки не происходит.
В настройках рассылок указан и шаблон, и время автоматической генерации.
Но при создании выпусков, те отправляются на почту хорошо.

В чем причина проблемы с рассылками?

На сайт приходит запрос, в котором посылают json-массив с параметрами заказа. Мы должны распарсить и записать заказ в битрикс.
Все это происходит хорошо.
Но только на сайте в кодировке UTF-8. На сайте с кодировкой Windows-1251 записывается все, кроме позиции.
Сравнивала массивы, которые получаются при записи и они идентичны, но почему-то все равно не работает.

Сначала я создаю заказ, потом добавляю в него позиции.

Алексей Тарасов, совсем забыла про то что он должен возвращать сам себя ))) спасибо.

теперь он добавляется как надо, но перед ним каждый раз создается агент с именем BitrixMainDataCacheEngineFiles::DelayedDelete(1);
а потом удаляется.

с чем это может быть связано?

Пишу собственный модуль. При нажатии на кнопку он должен создавать агента, а при нажатии на другую кнопку, удалять его. И он это все делает. Один раз.
А если я создам агента, затем удалю, а затем снова нажму создать, он больше не создает его.

Почему это может происходить? Подскажите, пожалуйста.

Источник

Переустановил сервер сайта, поднял сайт запускаю проверку доступа — получаю Permission denied:

BITRIX SESSID ERROR кто может подсказать в чем причина ? установка на актуальной версии битриксового веб-окружения

5 ответов

да, проблема решилась. Правда, не очень уже помню что там было:)

просто тоже самое, вангую из за смены домена. Просто рабочий на домене, а бекап развернул на поддомене и там посыпались эти ошибки

я тогда, помоему, просто очистил куки браузера и смог войти в админку, а там уже сменить домен в настройках

в админку заходит , но ничего не дает править. Я уже напрямую в бд настройки правлю

Похожие вопросы

Добрый день Я как-то делал подарочные сертификаты на битриксе, были они сделаны таким образом, что каждый сертификат — это по сути отдельная сущность, ну типа сертификат на 50.

А как можно при помощи регулярного выражения заменить пробел перед цифрой на неразрывный?

Всем привет. Есть немного нетривиальная задачка, второй день ломаю голову. Есть инфоблок с подборками, в элементах которого указывается url страницы с отфильтрованными товар.

в плане? переиспользовать купон не получится

Друзья, как вызвать связанные товары по ID в catalog:section? Сейчас при поиске по сайту перекидывает на страницу с искомым товаром. После этого товара нужно вывести связанны.

Здравствуйте. Что означает @ и точка в ключе, когда делаем выборку?

народ, такой вопрос — можно ли с одного проекта дернуть модуль в другой?Или он к ключу привязывается?

ну всмысле я понимаю откуда и куда дергать модули, дальнейшие действия какие?

а кто нибудь может объяснить в чем прикол битрикса24?Судя по всему там тоже есть интернет магазин но с функционалом CRM?Он как то удобней обычного битрикса?Написан с 0 на друг.

Источник

02
Ноя

Freesmska -> bitrix, php -> Как я лечил поиск в Bitrix (версия модуля 11.0.6)

Для всех кто хотел облегчить жизнь с поиском. Было это в далеком ноябре 2012 🙂 Я сидел и думал почему при поиске по морфологии мой поиск ищет только 50% результатов. И нашел ребята я сделал это, о да…

Дело в том, что если вы обновляете cms с ранних версий поиск не меняет таблицы и продолжает отрабатывать по старой логике заложенной еще в древней версии, предположительно хрен знает какой. 🙂

И однажды приходит клиент, который говорит, ребята беда не ищет… И вы начинаете искать решение, а в итоге ни фига перекапывать 500 строк кода поиска и разбираться в запросах битрикса становиться все тошнотней.

И что же делать думаете вы, забить… писать свой или просто фиг с ним продолжить жить дальше с таким… Гуглите не находите ответа и опечаленные пишете в поддержку, но та отвечает в течение 3 дней и как всегда, давайте доступы будем разбираться. Обновите до последней версии… А сайт уже работает и не известно что слетит при обновлении…

Да-к вот решение: Обновляем поиск до версии 2 вручную:

1) в dbconnect.php

добавляете строку define(«BX_SEARCH_VERSION», 2);

2) Дальше ползете в бекофис на вкладку Настройки ->Инструменты->SQL-запрос

и выполняете следующие команды:

CREATE TABLE b_search_content_text
(
SEARCH_CONTENT_ID INT(11) NOT NULL,
SEARCH_CONTENT_MD5 CHAR(32) NOT NULL,
SEARCHABLE_CONTENT LONGTEXT,
PRIMARY KEY PK_B_SEARCH_CONTENT_TEXT (SEARCH_CONTENT_ID)
);

CREATE TABLE b_search_stem
(
ID INT(11) NOT NULL auto_increment,
STEM VARCHAR(50) BINARY NOT NULL,
PRIMARY KEY PK_B_SEARCH_STEM (ID),
UNIQUE KEY UX_B_SEARCH_STEM (STEM)
);

ALTER TABLE b_search_content_stem ADD PS FLOAT NOT NULL;
ALTER TABLE b_search_content MODIFY USER_ID INT(11);

3) Делаете переиндексацию и вуаля поиск ищет просто великолепно.

Всем хорошего настроения. Век живи век учись 🙂

100% зрение без операций

У вас есть мнение? Оставьте свой отзыв:

1С Bitrix: MySQL Query Error Ошибка при добавлении новости

30 Ноября -0001
Admin
4500

С некоторых пор у меня при добавлении контента стала появляться ошибка:

File: ../bitrix/modules/search/classes/mysql/search.php
Line: 1118
MySQL
 Query Error: ins ert into b_search_content_stem (SEARCH_CONTENT_ID, 
LANGUAGE_ID, STEM, TF,PS) val ues (115, 'ru', 895, 0.1191, 140.0000), 
(115, 'ru', 720, 0.1191, 142.0000), (115, 'ru', 7804, 0.1191, 143.0000),
 (115, 'ru', 2033, 0.1191, 144.0000), (115, 'ru', 7805, 0.1191, 
145.0000), (115, 'ru', , 0.1191, 146.0000), (115, 'ru', 2263, 0.1191, 
147.0000), (115, 'ru', 6, 0.4534, 242.8462), (115, 'ru', 7, 0.1888, 
156.0000), (115, 'ru', 7807, 0.1191, 150.0000), (115, 'ru', 376, 0.1191,
 151.0000), (115, 'ru', 2221, 0.1191, 152.0000), (115, 'ru', 7808, 
0.1191, 153.0000), (115, 'ru', 4651, 0.1191, 154.0000), (115, 'ru', 
2880, 0.1191, 155.0000), (115, 'ru', 5554, 0.1888, 157.5000), (115, 
'ru', 7809, 0.1191, 157.0000), (115, 'ru', 2063, 0.2382, 186.0000), 
(115, 'ru', 7810, 0.1191, 161.0000), (115, 'ru', 1767, 0.1191, 
162.0000), (115, 'ru', 7811, 0.1191, 164.0000), (115, 'ru', 2965, 
0.1191, 165.0000), (115, 'ru', 7812, 0.1191, 166.0000), (115, 'ru', 
2953, 0.1888, 170.5000), (115, 'ru', 7813, 0.1191, 168.0000), (115, 
'ru', 7814, 0.1191, 170.0000), (115, 'ru', 7815, 0.1191, 171.0000), 
(115, 'ru', 7816, 0.1191, 172.0000), (115, 'ru', 7817, 0.1191, 
173.0000), (115, 'ru', 5033, 0.1888, 276.5000), (115, 'ru', 1139, 
0.1888, 277.5000), (115, 'ru', 987, 0.1191, 177.0000), (115, 'ru', 7818,
 0.1191, 178.0000), (115, 'ru', 7819, 0.1191, 179.0000), (115, 'ru', 
840, 0.1191, 180.0000), (115, 'ru', 1548, 0.1191, 182.0000), (115, 'ru',
 1808, 0.1191, 183.0000), (115, 'ru', 1034, 0.3343, 346.1667), (115, 
'ru', 4721, 0.1191, 185.0000), (115, 'ru', 7820, 0.1191, 186.0000), 
(115, 'ru', 4868, 0.1191, 188.0000), (115, 'ru', 4160, 0.1191, 
189.0000), (115, 'ru', 1803, 0.1191, 190.0000), (115, 'ru', 1448, 
0.1191, 191.0000), (115, 'ru', 2384, 0.1191, 192.0000), (115, 'ru', 
7821, 0.1191, 193.0000), (115, 'ru', 7822, 0.1191, 195.0000), (115, 
'ru', 7823, 0.1191, 196.0000), (115, 'ru', 7824, 0.1191, 197.0000), 
(115, 'ru', 2521, 0.1191, 198.0000), (115, 'ru', 54, 0.1191, 199.0000), 
(115, 'ru', 7825, 0.1191, 201.0000), (115, 'ru', 297, 0.1191, 202.0000),
 (115, 'ru', 7826, 0.1191, 208.0000), (115, 'ru', 3063, 0.1191, 
209.0000), (115, 'ru', 7827, 0.1191, 210.0000)[You have an error in your
 SQL syntax; check the manual that corresponds to your MySQL server 
version for the right syntax to use near ' 0.1191, 146.0000), (115, 
'ru', 2263, 0.1191, 147.0000), (115, 'ru', 6, 0.4534, ' at line 9]

DB query error.
Please try later.

Файл /bitrix/modules/search/classes/mysql/search.php 

Строка: 1108 

Код
.", ".(BX_SEARCH_VERSION > 1? CSearch::RegisterStem($word): "'".$DB->ForSQL($word)."'") 

Меняем на 

Код
.", ".(BX_SEARCH_VERSION > 1? "'".CSearch::RegisterStem($word)."'": "'".$DB->ForSQL($word)."'") 

Если не поменять, создается не совсем корректная строка MySQL: 

Код
(116, 'ru', , 0.1079, 402.0000), 

Должно быть так: 

Код
(116, 'ru', '', 0.1079, 402.0000), 

Другие статьи:

  • Как правильно сделать «приятный» баннер?
  • Как удалить приложение Ваш телефон Your Phone Windows 10
  • JQuery подсветка tr table таблицы
  • Можно ли сохранить JavaScript переменную в файл?
  • Настройка Mikrotik IPTV для Матрикс (Matrix) Донецк ДНР
  • Феникс код активации Интернет
  • Получить аттестат Начальный Персональный Webmoney
  • Где в Макеевке купить наушники?
  • Замена фото барабана картриджа в Макеевке или Донецке
  • Купить матрицу или экран для ноутбука, планшета или смартфона можно в EVK!
  • 5 языков программирования будущего
  • Распечатка текста Ламинирование Сканирование Фото на документ Макеевка
  • Макеевка detech — все что нужно!
  • Установка и настройка мониторинга UPS (источника бесперебойного питания) на CENTOS 7.0 и выше
  • Заправка принтера, заправка картриджей, ремонт принтеров, МФУ, копиров


Ошибки базы данных -поля отличаются

Ошибки базы данных -поля отличаются

28.12.2016

На одном действующем Битрикс сайте выдает ошибки БД — поля отличаются подробности в журнале.
Журнал:
———————————————
В таблице b_ticket поле TITLE «text NOT NULL » не соответствует описанию на диске «varchar(255) NOT NULL »
В таблице b_ticket поле OWNER_SID «text NULL DEFAULT NULL » не соответствует описанию на диске «varchar(255) NULL DEFAULT NULL »
В таблице b_ticket поле LAST_MESSAGE_SID «text NULL DEFAULT NULL » не соответствует описанию на диске «varchar(255) NULL DEFAULT NULL »
В таблице b_ticket поле SUPPORT_COMMENTS «text NULL DEFAULT NULL » не соответствует описанию на диске «varchar(255) NULL DEFAULT NULL »
В таблице b_search_content_stem поле STEM «varchar(50) NOT NULL » не соответствует описанию на диске «int(11) NOT NULL »
В таблице b_search_content_freq поле STEM «varchar(50) NOT NULL DEFAULT «» » не соответствует описанию на диске «int(11) NOT NULL DEFAULT «0» »
ALT ER TABLE `b_ticket` MODIFY `TITLE` varchar(255) NOT NULL ;
ALT ER TABLE `b_ticket` MODIFY `OWNER_SID` varchar(255) NULL DEFAULT NULL ;
ALT ER TABLE `b_ticket` MODIFY `LAST_MESSAGE_SID` varchar(255) NULL DEFAULT NULL ;
ALT ER TABLE `b_ticket` MODIFY `SUPPORT_COMMENTS` varchar(255) NULL DEFAULT NULL ;
ALT ER TABLE `b_search_content_stem` MODIFY `STEM` int(11) NOT NULL ;
ALT ER TABLE `b_search_content_freq` MODIFY `STEM` int(11) NOT NULL DEFAULT «0» ;

Способы решения

Автоматическое исправление не решает проблемы.  Нужно перейти в sql-строку (Настройки > Инструменты > SQL запрос) и там выполнить запрос:
ALTER TABLE `b_ticket` MODIFY `TITLE` varchar(255) NOT NULL ;
ALTER TABLE `b_ticket` MODIFY `OWNER_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `LAST_MESSAGE_SID` varchar(255) NULL DEFAULT NULL ;
ALTER TABLE `b_ticket` MODIFY `SUPPORT_COMMENTS` varchar(255) NULL DEFAULT NULL ;

После этого нужно переустановить (удалить и снова установить) модуль поиска без сохранения таблиц (Настройки-Настройки продукта-Модули).

Затем нужно выполнить полную переиндексацию. Для этого в административной части сайта перейти в «Настройки > Поиск > Переиндексация». Снять галочку «Переиндексировать только измененные», установить шаг, например, 10 секунд и нажать кнопку «Переиндексировать».

Ещё статьи:

18.01.2023
Нюансы перехода битрикс на РНР 8.0
С февраля битрикс прекращает поддерживать РНР 7.4 и в битрикс сегменте сайтов начался переход на РНР 8 для получения обновлений.
Но без нюансов и ошибок…
ID: 431

10.01.2023
БУС окончательно всё?
Появилась информация от битрикс, что грубо говоря поддержка по отраслевому медицинскому решению от битрикс будет до 1 февраля 2024 года, а что потом б…
ID: 426

30.08.2022
Типовые претензии к подрядчику и к битрикс
По свежим следам я собрал типовые претензии к подрядчику и к битрикс. Мной был проведён аудит и я увидел, что техническое состояние сайта хорошее, нареканий…
ID: 338

Новые статьи в блоге:

Возврат к списку

Содержание

  • 1 Обработчики — наше всё
  • 2 Код обработчика
  • 3 Регистрируем обработчики и добавляем класс в автозагрузку
    • 3.1 Похожие записи
      • 3.1.1 1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании
      • 3.1.2 1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax
      • 3.1.3 1С-Битрикс. Защита от спама в регистрации без капчи
    • 3.2 22 комментария
  • 4 1 ответ 1

Идея сайта изначально заключалась в написание программы для отправки смс, но щас нет времени, чтобы заниматся этим вопросом, но проект не умер, просто временно заморожен.
Так же Вы можете почитать мои уроки по программированию и некоторую интересующую Вас инфу и другие вкусности.

Для всех кто хотел облегчить жизнь с поиском. Было это в далеком ноябре 2012 🙂 Я сидел и думал почему при поиске по морфологии мой поиск ищет только 50% результатов. И нашел ребята я сделал это, о да…

Дело в том, что если вы обновляете cms с ранних версий поиск не меняет таблицы и продолжает отрабатывать по старой логике заложенной еще в древней версии, предположительно хрен знает какой. 🙂

И однажды приходит клиент, который говорит, ребята беда не ищет… И вы начинаете искать решение, а в итоге ни фига перекапывать 500 строк кода поиска и разбираться в запросах битрикса становиться все тошнотней.

И что же делать думаете вы, забить… писать свой или просто фиг с ним продолжить жить дальше с таким… Гуглите не находите ответа и опечаленные пишете в поддержку, но та отвечает в течение 3 дней и как всегда, давайте доступы будем разбираться. Обновите до последней версии… А сайт уже работает и не известно что слетит при обновлении…

Да-к вот решение: Обновляем поиск до версии 2 вручную:

1) в dbconnect.php

добавляете строку define(«BX_SEARCH_VERSION», 2);

2) Дальше ползете в бекофис на вкладку Настройки ->Инструменты->SQL-запрос

и выполняете следующие команды:

CREATE TABLE b_search_content_text
(
SEARCH_CONTENT_ID INT(11) NOT NULL,
SEARCH_CONTENT_MD5 CHAR(32) NOT NULL,
SEARCHABLE_CONTENT LONGTEXT,
PRIMARY KEY PK_B_SEARCH_CONTENT_TEXT (SEARCH_CONTENT_ID)
);

CREATE TABLE b_search_stem
(
ID INT(11) NOT NULL auto_increment,
STEM VARCHAR(50) BINARY NOT NULL,
PRIMARY KEY PK_B_SEARCH_STEM (ID),
UNIQUE KEY UX_B_SEARCH_STEM (STEM)
);

ALTER TABLE b_search_content_stem ADD PS FLOAT NOT NULL;
ALTER TABLE b_search_content MODIFY USER_ID INT(11);

3) Делаете переиндексацию и вуаля поиск ищет просто великолепно.

Всем хорошего настроения. Век живи век учись 🙂

Наверняка, многие знают, что в битриксе есть морфологический поиск. И вроде бы он даже худо-бедно работает. Но если мы торгуем товарами, и хотим, чтобы поиск искал и по части чего-то специфического, например, артикула товара (пример: артикул «Р6543», подстрокой будет «6543»), то ничего из этого не выйдет. Поиск тупо ничего не найдёт.

В этой заметке покажу способ, как можно эту проблему решить.

В момент индексации элемента будем добавлять в таблицу b_search_content_stem наши части слов. То есть, в нашем случае, для товара с артикулом «Р6543» мы добавим «6543» в поисковый индекс. Запросы «654» и «65» так же будут отдавать товар с артикулом «Р6543».

Обработчики — наше всё

Как обычно, решать мы будем обработчиками. Оффтоп: иногда вижу проекты вообще без файлов init.php и своих кастомных модулей. Ребята, как вам удаётся без этого сайты собирать?

Будем слушать 3 события: BeforeIndex, OnBeforeIndexUpdate и OnAfterIndexAdd.

  • BeforeIndex — вызывается перед индексацией элемента методом CSearch::Index()
  • OnBeforeIndexUpdate — вызывается перед обновлением поискового индекса
  • OnAfterIndexAdd — вызывается после добавления новых данных в поисковый индекс.

На событие BeforeIndex мы проверим, что в индекс летит нужная нам запись и сохраним в статическую переменную данные, которые нам понадобятся в последующих событиях. По другому их там не достать.

На события OnBeforeIndexUpdate и OnAfterIndexAdd запишем в таблицу b_search_content_stem то, что нам нужно. API для этого нет, так что будем писать чистые SQL-запросы. Проверял на MySQL с InnoDB таблицей. На остальных не факт, что будет корректно работать

Код обработчика

Сохраняем код в файле /local/php_interface/classes/handlers/search/stemming.php

В свойстве $allowedIblockId класса необходимо указать ID инфоблоков, для которых нужен функционал.

Регистрируем обработчики и добавляем класс в автозагрузку

Добавить в /local/php_interface/init.php

На этом всё. Осталось только запустить полную переиндексацию и теперь можно не тратить жизнь на вписывание в поиск артикулов полностью.

Для своих частных случаев код придётся, конечно, поправить под себя.

Похожие записи

1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании

В этой заметке я хочу рассказать о технологии LazyLoad или в простонародье «ленивая загрузка» в Битриксе. Метод, описанный мной, будет точно работать в компонентах catalog.section и news.list.

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

1С-Битрикс. Защита от спама в регистрации без капчи

Не редкость, когда боты начинают регистрироваться на сайтах и захламлять списки пользователей своим присутствием. В «1С-Битрикс» можно включить капчу для защиты от спама. Но порой и капча не спасает, да и заставлять пользователей вводить код с капчи, я считаю, не гуманно. Воспользуемся другим трюком.

22 комментария

Пытаюсь воспользоваться описанным решением проблемы морфологического поиска. При запуске переиндексации она просто зависает. Подскажите, с чем это может быть связано? может быть, я не так понял, где нужно указывать >

Александр, что значит зависает?

Смотрите логи ошибок веб-сервера.

После добавления файла Добавить в /local/php_interface/init.php

сайт выпадает в белый экран.

Смотреть логи ошибок веб-сервера.

Указал собственный инфоблок (вместо 1) и вместо [‘ARTICLE’] собственный код артикула. Переиндексировал.

Результата нет — по части артикула не ищет. Может еще что-то изменить?

Напишите через обратную связь на странице «Контакты» — посмотрим.

А почему написано Запросы «653» и «65» так же будут отдавать товар с артикулом «Р6543»

Да, опечатка. Спасибо, поправил.

Вот такой артикул J001.DР.ЕR.20.91.CC.

сам битрикс например J001 находит, а короче — уже нет. Какая тут регулярка нужна , не могу понять.

Что-то вроде: «найти каждый набор символов равный или длиннее 2»? Или какой?

Возможно будет достаточно разбить по точке и оставить части, у которых длина больше 2.

не , по точке битрикс сам разбивает.

но у него кажется лимит — ищет только если в сроке 4 знака (точки не учитывает).

долго вы регулярки изучали? чтобы разобраться в них — сколько времени надо.

и да, про эксперименты — ну а как понять, каждый раз переиндексацию делать?

чем пользуетесь для отладки регулярок?

долго вы регулярки изучали? чтобы разобраться в них — сколько времени надо.

Сколько бы не изучал, иногда всё равно приходиться лезть в документацию

и да, про эксперименты — ну а как понять, каждый раз переиндексацию делать?

скорее всего (но не факт)

чем пользуетесь для отладки регулярок?

Обычно прямо в процессе и отлаживаю. В закладках есть http://regexr.com/

А вообще странная на сайте с которым я вожусь ситуация: по части артикула ищет, но только если это от 4 знаков, причем точки не учитываются. Т.е. как будто уже сделана настройка поиска по части, но сделан какой-то лимит на количество. Это вообще обычная ситуация для битрикса или нет? Большой у вас опыт в этом деле? А то сверху придумвать еще какой-то функционал, если это уже реализовано — как то неправильно. Как будто квест разгадываешь.

Похоже на то, что ваша регулярка не работает

Т.е. как будто уже сделана настройка поиска по части, но сделан какой-то лимит на количество. Это вообще обычная ситуация для битрикса или нет?

Поиск по части слова с морфологией есть, но он не всегда хорошо работает. Собственно, про то как можно это ситуацию подправить для себя и написана заметка.

Похоже на то, что ваша регулярка не работает

запустил на опенсервер — скрипт один результаты разные

У меня такие же результаты, как у вас на последнем скриншоте.

Существует ли исчерпывающий список того, что нужно поправить. Т.е. понятно, что поле артикула [‘PROPERTIES’][‘ARTICLE’][‘VALUE’]

Может что-то еще?

Для своих частных случаев код придётся, конечно, поправить под себя.

Только самое первое условие тут OlegproClassesHandlersSearch::beforeIndexUpdate

Потестировал на локалном — работает, кроме этой части: «Запросы «654» и «65» так же будут отдавать товар с артикулом «Р6543».

непонятно, а за счет чего так должно работать? Это в битриксе настраивается?

и что надо сделать, чтобы данные таблицы заполнились? используется поиск на сфинксе.(галочки «При ранжировании результатов учитывать расстояние между словами», «При ранжировании результатов учитывать рейтинг» проставлены)

И за что отвечают данные таблицы?

1 ответ 1

В каждом инфоблоке есть настройки «Индексировать элементы для модуля поиска» вот если вам нужно что бы данные из конкретного инфоблока участвовали в поиске ее нужно включить.
Далее когда настроите инфоблоки нужно зайти в Настройки — Поиск — Переиндексация и сделать полную переиндексацию, после этого эти таблицы должны заполниться.

Наверняка, многие знают, что в битриксе есть морфологический поиск. И вроде бы он даже худо-бедно работает. Но если мы торгуем товарами, и хотим, чтобы поиск искал и по части чего-то специфического, например, артикула товара (пример: артикул «Р6543», подстрокой будет «6543»), то ничего из этого не выйдет. Поиск тупо ничего не найдёт.

В этой заметке покажу способ, как можно эту проблему решить.

Суть

В момент индексации элемента будем добавлять в таблицу b_search_content_stem наши части слов. То есть, в нашем случае, для товара с артикулом «Р6543» мы добавим «6543» в поисковый индекс. Запросы «654» и «65» так же будут отдавать товар с артикулом «Р6543».

Обработчики — наше всё

Как обычно, решать мы будем обработчиками. Оффтоп: иногда вижу проекты вообще без файлов init.php и своих кастомных модулей. Ребята, как вам удаётся без этого сайты собирать?

Будем слушать 3 события: BeforeIndex, OnBeforeIndexUpdate и OnAfterIndexAdd.

  • BeforeIndex — вызывается перед индексацией элемента методом CSearch::Index()
  • OnBeforeIndexUpdate — вызывается перед обновлением поискового индекса
  • OnAfterIndexAdd — вызывается после добавления новых данных в поисковый индекс.

На событие BeforeIndex мы проверим, что в индекс летит нужная нам запись и сохраним в статическую переменную данные, которые нам понадобятся в последующих событиях. По другому их там не достать.

На события OnBeforeIndexUpdate и OnAfterIndexAdd запишем в таблицу b_search_content_stem то, что нам нужно. API для этого нет, так что будем писать чистые SQL-запросы. Проверял на MySQL с InnoDB таблицей. На остальных не факт, что будет корректно работать

Код обработчика

Сохраняем код в файле /local/php_interface/classes/handlers/search/stemming.php

В свойстве $allowedIblockId класса необходимо указать ID инфоблоков, для которых нужен функционал.

<?php
oleg.39style@gmail.com
 
namespace OlegproClassesHandlersSearch;
 
use BitrixMainLoader;
use BitrixMainApplication;
use BitrixMainDBSqlQueryException;
 
class Stemming
{
 
     @var 
    protected static $allowedIblockId = array(
        1
    );
 
     @var
     
    private static $element;
 
     @param  @return 
    public static function beforeIndex($arFields)
    {
        static $allowedIblockId = null;
 
        if ($allowedIblockId === null) {
            $allowedIblockId = array_flip(self::$allowedIblockId);
        }
 
        if (
            $arFields['MODULE_ID'] == 'iblock'
            && isset($allowedIblockId[$arFields['PARAM2']])
            && strlen($arFields['ITEM_ID']) > 0
            && substr($arFields['ITEM_ID'], 0, 1) != 'S'
            && Loader::includeModule('iblock')
        ) {
            if ($obElement = CIBlockElement::GetList(
                array(),
                array('ID' => $arFields['ITEM_ID']),
                false,
                false,
                array()
            )->GetNextElement()
            ) {
 
                $element = $obElement->GetFields();
 
                $element['PROPERTIES'] = $obElement->GetProperties();
 
                self::$element = $element;
 
            }
 
        }
 
        return $arFields;
 
    }
 
 
     @param  @param 
    public static function beforeIndexUpdate($indexId, $arFields)
    {
 
        if (
            isset(self::$element) && is_array(self::$element)
            && isset(self::$element['PROPERTIES']['ARTICLE'])
            && strlen(trim(self::$element['PROPERTIES']['ARTICLE']['VALUE']))
            && preg_match('~^.*?([0-9.,]+).*?$~', trim(self::$element['PROPERTIES']['ARTICLE']['VALUE']), $m)
        ) {
 
            $word = ToUpper($m[1]);
 
            $stemId = CSearch::RegisterStem($word);
 
            if ($stemId > 0) {
 
                $connection = Application::getConnection();
 
                $sqlHelper = $connection->getSqlHelper();
 
                try {
 
                    $thereIs = $connection->queryScalar(
                        sprintf(
                            "SELECT 1 FROM b_search_content_stem WHERE SEARCH_CONTENT_ID = '%s' AND STEM = '%s'",
                            $sqlHelper->forSql($indexId),
                            CSearch::RegisterStem($word)
                        )
                    );
 
                    if ($thereIs === null) {
                        $connection->query(sprintf(
                            "INSERT IGNORE INTO `b_search_content_stem` (`SEARCH_CONTENT_ID`, `LANGUAGE_ID`, `STEM`, `TF`, `PS`) VALUES ('%s', '%s', '%s', '%s', '%s')",
                            $sqlHelper->forSql($indexId),
                            'ru',
                            CSearch::RegisterStem($word),
                            number_format(0.2, 4, ".", ""),
                            number_format(1, 4, ".", "")
                        ));
                    }
 
                } catch (SqlQueryException $e) {
                    AddMessage2Log(sprintf("\%s:n%s", __METHOD__, $e->getMessage()));
                }
 
            }
 
        }
 
        self::$element = null;
 
    }
 
}

Регистрируем обработчики и добавляем класс в автозагрузку

Добавить в /local/php_interface/init.php

<?php
 
BitrixMainEventManager::getInstance()->addEventHandler('search', 'BeforeIndex',
    array('OlegproClassesHandlersSearchStemming', 'beforeIndex')
);
 
BitrixMainEventManager::getInstance()->addEventHandler('search', 'OnBeforeIndexUpdate',
    array('OlegproClassesHandlersSearchStemming', 'beforeIndexUpdate')
);
 
BitrixMainEventManager::getInstance()->addEventHandler('search', 'OnAfterIndexAdd',
    array('OlegproClassesHandlersSearchStemming', 'beforeIndexUpdate')
);
 
BitrixMainLoader::registerAutoLoadClasses(null, array(
    'OlegproClassesHandlersSearchStemming' => '/local/php_interface/classes/handlers/search/stemming.php',
));

На этом всё. Осталось только запустить полную переиндексацию и теперь можно не тратить жизнь на вписывание в поиск артикулов полностью.

P.S.

Для своих частных случаев код придётся, конечно, поправить под себя.

Похожие записи

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

Итак, поехали!

1С-Битрикс. Пишем человеческий шаблон многоуровнего меню каталога

Не буду писать про боль при интегации дефотного шаблона. Давайте просто напишем свой, с блекджеком и вот этим всем.

В заметке будет (интересного):

  • построение древовидного массива без рекурсии (неограниченной вложенности)
  • анонимная рекурсивная функция
  • формирование урлов для секций супер-быстрым способом
  • поработаем с сущностями инфоблока через ORM D7

Дальше много кода.

Добавить комментарий

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ятрогенная патология врачебные ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка b 203 мфу canon