Оценка соответствия MySQL вызывает ошибку «ДВОЙНОЕ значение вне диапазона»

#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) , а затем отдельный запрос для выбора just MATCH (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.