【问题标题】:Full Text Search always returns empty result set全文搜索总是返回空结果集
【发布时间】:2015-09-18 19:00:38
【问题描述】:

我有一个名为“fact”的表,标题列应该是全文索引。

首先,我添加一个全文索引:

ALTER TABLE fact ADD FULLTEXT title_fts (title)

所以,我插入行:

INSERT INTO fact (id, title) VALUES ('1', 'red blue yellow ok green grey ten first wise form');

然后我执行搜索:

select * from fact f where contains (f.title, '"red" or "blue"')

当我执行以下查询或任何其他带有“包含”语句的查询时,我会得到 emtpy 结果集:

我必须使用这句话,not反对匹配或喜欢。 有谁碰巧知道为什么会这样? 谢谢。

【问题讨论】:

  • 那不是全文搜索你需要使用match against语法
  • 你完全正确。那解决了它。谢谢!

标签: mysql full-text-search full-text-indexing fulltext-index


【解决方案1】:

在使用全文搜索时,有两个非常重要的概念。第一个是最小工作长度(参见here)。默认情况下,该值为 4,这意味着比这更短的单词将被忽略。再见“红”、“好”、“十”等短字。

第二个重要概念是停用词列表(参见here)。这也将摆脱“ok”和“first”。

您的文本没有“蓝色”并且“红色”被忽略,因此您的查询不会返回任何内容。

在确定真正需要包含的单词后,您需要重新构建索引。

【讨论】:

  • 非常感谢!但是,当我用(仅)5 个字母的单词做同样的事情时,即:select * from fact f where contains (f.title, 'green or yellow'),我仍然得到空的结果集。是否应该重新配置全文索引?
  • @YoungDev 。 . .您还需要了解布尔模式与自然语言模式。您的查询结构表明您应该坚持使用布尔模式。
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多