【问题标题】:Fulltext search on mysql with a 3 letter wordmysql 上的全文搜索,包含 3 个字母的单词
【发布时间】:2012-10-14 11:57:48
【问题描述】:

我正在尝试在包含“The Zen Circus”的字段中查找“the zen”字符串。 我有一个全文索引。

select url,name,
,   MATCH(name) AGAINST ( 'zen*' IN BOOLEAN MODE) as A
,   MATCH(name) AGAINST ( '"the zen*"' IN BOOLEAN MODE) as B
,   MATCH(name) AGAINST ('>the* zen' IN BOOLEAN MODE) as C
,   MATCH(name) AGAINST ('thezen*' IN BOOLEAN MODE) as D
,   MATCH(name) AGAINST ('cir*' IN BOOLEAN MODE) as E
,   MATCH(name) AGAINST ('circus*' IN BOOLEAN MODE) as F
from pages where url='thezencircus'

我得到了这个结果:

url = thezencircus
name = The Zen Circus
A = 0   (why?)
B = 0   (why?)
C = 0   (why?)
D = 0   (ok)
E = 1   (ok)
F = 1   (ok)

我还在 msyql 配置文件中添加了 ft_min_word_len = 2。

有什么想法吗?

【问题讨论】:

    标签: mysql search full-text-search


    【解决方案1】:

    看到这个答案MySQL full text search for words with three or less letters

    [mysqld]
    ft_min_word_len=3
    然后您必须重新启动服务器并重建您的 FULLTEXT 索引。

    请记住重新启动和重建索引。


    编辑
    运行show variables like 'ft_%'; 以确认字长与您设置的匹配。

    【讨论】:

    • 我已经完成了你所说的一切,谢谢,但问题仍然存在。 :-(
    • 尝试运行 REPAIR TABLE pages QUICK;另外,为了确保你做对了,在设置 ft_min_word_length 时:lostquery.com/questions/196/… 你是这样做的吗?
    • 另外,请参阅我关于如何确认 ft_min_word_len 值的编辑
    • 愚蠢!有用!感谢支持,服务器没有重启(托管服务商告诉我他做了,但他没有!)
    【解决方案2】:

    Kao 是对的,但这对我一点帮助都没有——为什么? InnoDB 表使用不同的设置 - 尝试更新这个并检查它:

        show variables like 'innodb_ft_min_token_size';
    

    【讨论】:

    • 是的,那是我的问题。在我创建索引之前 ft_min_word_len 已经设置为 2,但是设置 innodb_ft_min_token_size 然后重新启动服务器并删除并重新创建索引是有效的。谢谢!
    【解决方案3】:

    SELECT *, MATCH (title) AGAINST('$aranan*' IN BOOLEAN MODE) AS score FROM vod WHERE MATCH (title) AGAINST ('$aranan*' IN BOOLEAN MODE) ORDER BY score DESC LIMIT 10

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-06-06
    • 2010-12-07
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2011-03-02
    • 2023-03-17
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多