【问题标题】:MySQL fulltext search only works in BOOLEAN Mode. How get relevancy?MySQL 全文搜索仅适用于 BOOLEAN 模式。如何获得相关性?
【发布时间】:2013-09-22 21:17:45
【问题描述】:

我想在自然语言模式下搜索以按相关性对结果进行排序,但我的查询仅适用于 BOOLEAN 模式选择器。如果我使用不带 BOOLEAN 的查询,我不会得到任何结果。知道为什么这不起作用吗?或者想知道如何通过 BOOELAN 的相关性(最匹配的关键字优先)获得结果?

我的查询:

SELECT *,
MATCH(md.keywords) AGAINST('$meta[keywords]' IN BOOLEAN MODE) AS score
FROM 
meta_data AS md 
INNER JOIN
sites AS si ON md.domain = si.domain && si.domain != '$data[domain]'
WHERE
MATCH(md.keywords) AGAINST('$meta[keywords]' IN BOOLEAN MODE)
ORDER BY score Desc
LIMIT 25

数据库是MyISAM,我已经更改了mysql表以进行全文搜索

FULLTEXT KEY `title` (`title`,`description`,`keywords`)

【问题讨论】:

  • afaik 你无法在布尔模式下获得相关性,即使名称暗示它会返回 true 或 false
  • 我试过 WITH QUERY EXPANSION 但这也没有显示任何结果。仍然不知道为什么在自然语言模式下搜索不起作用。
  • 我发现我正在使用的脚本通过 PDO 获取数据: $conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);这可能是自然语言模式下全文搜索不起作用的原因吗?
  • 它可以是......只是尝试不使用 PDO 并查看

标签: php mysql boolean full-text-search


【解决方案1】:

将您的查询更改为

 SELECT *, MATCH(md.keywords) AGAINST('$meta[keywords]') AS score
 FROM 
 meta_data AS md 
 INNER JOIN sites AS si ON md.domain = si.domain && si.domain != '$data[domain]'
 WHERE
 MATCH(md.keywords) AGAINST('$meta[keywords]' IN BOOLEAN MODE)
 ORDER BY score DESC
 LIMIT 25

MATCH(md.keywords) AGAINST('$meta[keywords]') AS score

将返回搜索词的相关性分数和

 ORDER BY score DESC

将按降序显示您的结果(即最高分在前)

【讨论】:

  • 好的,我想通了:全文索引的表不应该针对所有列进行更改。仅适用于 MATCH 子句中提到的列。所以使用后: ALTER TABLE meta_data ADD FULLTEXT (keywords) 现在可以工作了!
  • 很高兴听到 :)
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2020-03-28
  • 2014-02-18
  • 1970-01-01
  • 2012-11-09
  • 2012-10-05
相关资源
最近更新 更多