MySQL 匹配相关性分数导致“DOUBLE 值超出范围”错误

Lev*_*ike 5 mysql mariadb

我在 Windows XAMPP 环境中创建了 MySQL (MariaDB) 全文搜索。一切都运转良好。但是,当将其放在实时服务器上(也使用 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 DOUBLE 值超出 '(match nameagainst ('"exactSearchPhrase"' in boolean mode)) * 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

编辑: 我最终再次构建了整个表格。看来是全文索引本身的问题。

Lia*_*iam 5

尝试ANALYZE TABLE table_name。这对我有用。

最近,在 MySQL 升级后,我在 DigitalOcean 托管数据库上遇到了同样的问题,我认为这涉及到切换到副本。当我将相关性分数乘以任何数字(包括* 1. 当我在没有乘法的情况下运行查询时,查询成功了。

通过将 MySQL 文档中的示例与我的数据中的类似搜索进行比较来判断,相关性分数对我来说似乎不正确。所以我认为 FULLTEXT 索引有问题,然后运行ANALYZE TABLE,然后它再次正常工作。

我不知道问题的确切原因,但我确实注意到我的情况和OP的情况下切换服务器的相似之处。