#mysql #mariadb
#mysql #mariadb
Вопрос:
Я создал полнотекстовый поиск MySQL (MariaDB) в своей среде Windows XAMPP. Все работает хорошо. Но при размещении его на реальном сервере (также с использованием MariaDB) я получаю от него ошибку 1690 Double value is out of range с точно такими же данными.
Я предполагаю, что проблема где-то в настройках MariaDB. Я просто не могу понять, какой это может быть параметр.
Вот упрощенный запрос:
SELECT id, (MATCH (name) AGAINST ('"exactSearchPhrase"' IN BOOLEAN MODE)*3 MATCH (name) AGAINST ('single*, Words*, Search*, Phrase*' IN BOOLEAN MODE)) as relevance, name FROM tableName WHERE MATCH(name) AGAINST('search Phrase' IN BOOLEAN MODE) ORDER BY relevance DESC
И это ошибка, которую я получаю
Числовое значение вне диапазона: 1690 ДВОЙНОЕ значение вне диапазона в ‘(сопоставление
name
с (‘»exactSearchPhrase»‘ в логическом режиме)) * 3
У кого-нибудь есть идея, какой параметр может вызвать такое поведение, которое может отличаться от такового в моей стандартной среде Xampp?
Редактировать после некоторой попытки и ошибки: любая операция с результатом сопоставления вызывает эту ошибку. Это смущает меня еще больше:
Ошибка отсутствует:
SELECT id, (MATCH (name) AGAINST ('"exactSearchPhrase"' IN BOOLEAN MODE)) as relevance, name FROM tableName WHERE MATCH(name) AGAINST('search Phrase' IN BOOLEAN MODE) ORDER BY relevance DESC
Ошибка:
SELECT id, (MATCH (name) AGAINST ('"exactSearchPhrase"' IN BOOLEAN MODE) 0) as relevance, name FROM tableName WHERE MATCH(name) AGAINST('search Phrase' IN BOOLEAN MODE) ORDER BY relevance DESC
Редактировать: в итоге я снова построил всю таблицу. Похоже, это проблема с самим полнотекстовым индексом.
Комментарии:
1. не могли бы вы добавить некоторые данные, где вы получаете ошибку dbfiddle.uk /…
2. спасибо за попытку помочь. Какие данные вам нужны? Точная поисковая фраза? Я не уверен, что я должен ввести, чтобы предоставить вам больше информации. Ошибка, похоже, возникает в первой части запроса с множителем (* 3). Каким-то образом оценка релевантности, похоже, выходит за пределы «двойного» диапазона.
3. попробуйте повторить ошибку в скрипке.
4. Попробуйте выбрать just
MATCH (name) AGAINST ('"exactSearchPhrase"' IN BOOLEAN MODE)
, а затем отдельный запрос для выбора justMATCH (name) AGAINST ('single*, Words*, Search*, Phrase*' IN BOOLEAN MODE)
, чтобы определить, какой из них генерирует большое ДВОЙНОЕ значение. Скорее всего, проблема в первом.5. Первая часть без множителя имеет значение 1,78 … e308, вторая часть — 1,79 … e308
Ответ №1:
Попробуйте ANALYZE TABLE table_name
. Это сработало для меня.
Недавно я столкнулся с той же проблемой с базой данных, управляемой DigitalOcean, после обновления MySQL, которое, как я полагаю, включало переключение на реплику. Я получил то же сообщение об ошибке «ДВОЙНОЕ значение вне диапазона», когда я умножил оценку релевантности на любое число, включая * 1
. И запрос был выполнен успешно, когда я запустил его без умножения.
Оценка релевантности показалась мне неверной, судя по сравнению примера в документах MySQL с аналогичным поиском в моих данных. Поэтому я предположил, что что-то не так с ПОЛНОТЕКСТОВЫМ индексом, и запустил ANALYZE TABLE
, а затем он снова работал правильно.
Я не знаю точной причины проблемы, но я отмечаю сходство переключения серверов в моем случае и в случае OP.