gpt4 book ai didi

mysql - MATCH AGAINST 对 FULLTEXT 索引不返回任何行

转载 作者:行者123 更新时间:2023-11-29 21:02:02 26 4
gpt4 key购买 nike

我有一个在线日记,其中两个主要的 MyISAM 表是:

**tbl_log_days**

Name Type
ID int(11)
post_date date
post_content longtext
post_entry_date datetime
post_cat_id int(11)
post_update_date datetime

**tbl_log_cats**

Name Type
fld_id int(11)
fld_cat varchar(255)

第一个商店日详细信息,第二个商店类别。

我一直在按照这篇文章的建议尝试 MATCH AGAINST 全文搜索:

使用全文索引进行高级文本搜索 http://www.hackingwithphp.com/9/3/18/advanced-text-searching-using-full-text-indexes

“tbl_log_days”表上有一个索引:

Keyname: post_content
Type: FULLTEXT
Unique: No
Packed: No
Column: post_content
Cardinality: 2

当我运行此搜索时:

    SELECT d.ID
, d.post_date
, d.post_content
, d.post_cat_id
, d.post_label
, c.fld_cat
FROM tbl_log_days d
, tbl_log_cats c
WHERE d.post_cat_id = c.fld_id
AND post_content LIKE '%saying%'
AND c.fld_id = 101
AND YEAR(post_date) = 2003
ORDER BY post_date;

它返回 5 行,并且“post_content”值包含完整的单词“saying”。

当我运行此 SQL 时:

    SELECT d.ID
, d.post_date
, d.post_content
, d.post_cat_id
, d.post_label
, c.fld_cat
FROM tbl_log_days d
, tbl_log_cats c
WHERE d.post_cat_id = c.fld_id
AND (MATCH(post_content) AGAINST ('saying') AND c.fld_id = 101 AND YEAR(post_date) = 2003)
ORDER BY post_date;

它不返回任何行。

这也不返回任何内容:

    SELECT d.ID
, d.post_date
, d.post_content
, d.post_cat_id
, d.post_label
, c.fld_cat
FROM tbl_log_days d
, tbl_log_cats c
WHERE d.post_cat_id = c.fld_id
AND MATCH(post_content) AGAINST ('saying')
AND c.fld_id = 101
AND YEAR(post_date) = 2003
ORDER BY post_date;

这也是如此 - 例如消除连接类别表时可能出现的问题:

    SELECT d.ID
, d.post_date
, d.post_content
, d.post_cat_id
, d.post_label
FROM tbl_log_days d
WHERE MATCH(post_content) AGAINST ('saying');

索引是否有问题 - 我本以为如果 LIKE '%saying%' 返回 5 行,那么 MATCH AGAINST 也应该这样做?

最佳答案

让我们说清楚:

post_content LIKE '%saying%'

不等于

MATCH(post_content) AGAINST ('saying')
  1. like 运算符执行简单的模式匹配。如果您的帖子内容中有文本“俗语”,点赞将返回它。默认自然语言模式下的全文搜索不会返回此记录,因为 said 与 said 不是同一个词。

  2. like 运算符将返回与该模式匹配的所有记录,无论总数中有多少记录与总体匹配。默认自然语言模式下的全文搜索会将出现在总记录 50% 以上的任何值视为噪声,并且不会返回仅匹配该条件的任何记录。

  3. 全文搜索有一个最小字长属性。如果你的最小单词长度比“saying”的长度长,那么mysql将简单地忽略这个标准。 like 运算符不关心这些事情。

Mysql有关于fulltext search的非常详细的文档,其中描述了上述所有内容以及更多内容。

关于mysql - MATCH AGAINST 对 FULLTEXT 索引不返回任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com