AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 67277
Accepted
robjmills
robjmills
Asked: 2009-09-22 03:07:00 +0800 CST2009-09-22 03:07:00 +0800 CST 2009-09-22 03:07:00 +0800 CST

MySQL全文3个字母限制

  • 772

我们有一个使用 MySQL 全文搜索的网站,但存在一个问题,即需要索引的许多字符串长度为 3 个字符。我知道 MySQL 的默认设置不是索引此长度的字符串,但我也知道可以在 my.cnf 中覆盖它。我认为限制的原因主要是基于性能,所以我不确定这是否是我们应该考虑改变的?我们在这里有什么选择?此服务器上有许多站点,因此任何性能下降都可能导致许多站点出现问题。

mysql版本:5

mysql
  • 2 2 个回答
  • 2023 Views

2 个回答

  • Voted
  1. Best Answer
    Andy
    2009-09-22T06:29:30+08:002009-09-22T06:29:30+08:00

    原因是基于性能的,是的。降低默认限制将增加存储索引所需的空间,并且增加的索引大小需要更长的搜索时间。影响将取决于使用情况(执行的查询类型)和当前数据集的大小。默认最小值为 4,您可以像这样降低它:

    [mysqld]
    ft_min_word_len=3
    

    当你重建你的索引(你必须)时,一定不要修复,而是删除并重建索引。这比修复它们要快得多。

    mysql> ALTER TABLE tbl_name DROP INDEX ft_index;
    Query OK, 9999 rows affected (0.00 sec)
    Records: 9999  Duplicates: 0  Warnings: 0
    
    mysql> ALTER TABLE tbl_name CREATE INDEX ft_index( searchable_text );
    Query OK, 9999 rows affected (0.00 sec)
    Records: 9999  Duplicates: 0  Warnings: 0
    

    最好的解决方案可能是在索引长度更改之前和之后监视开发服务器上的索引大小。

    最好的选择(我已经推迟)是忽略 MySQL 全文匹配(它有严重的限制,包括仅 MyISAM、无法匹配前缀通配符、禁止的默认停用词列表)并实施第三方解决方案。可用的最佳选择是:

    • Lucene - 一个基于 Java 的 apache 项目,占用空间小,速度快,被广泛采用
    • Sphinx - 基于 SQL(可用于 MySQL、PostgreSQL 或 XML 的连接器),不完全是 1.0(当前为 0.9.10),很好采用-ish

    我个人会选择 Lucene,尽管它需要一个本地 java 实例。如果这是不可能的,Sphinx 很容易为 PHP(在这里演练)和许多其他语言配置。

    这里有一些很好的基准和其他人对此事的第一印象。

    • 3
  2. SK9
    2011-09-09T05:25:41+08:002011-09-09T05:25:41+08:00

    作为安迪答案的替代方案,您可以在短单词的末尾添加一个虚拟字符以人为地增加其长度,而不是更改全局设置。

    例如,对于单词“at”,您可以将其替换为“at--”(长度为 4),对于单词“see”,您可以将其替换为“see-”(长度也是 4)。

    您可以派生这样的列并为其编制索引,但返回原始数据。

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve