4

我正在为我的网站构建一个小搜索功能。我正在获取用户的查询,对关键词进行词干化,然后针对词干化的关键词运行全文 MySQL 搜索。

问题是 MySQL 将词干视为文字。这是正在发生的过程:

  1. 用户搜索“棒球”之类的词
  2. 我的词干算法(Porter Stemmer)将“棒球”变成“棒球”
  3. 全文没有找到任何匹配“basebal”的内容,即使应该有“baseball”和“baseballs”的匹配项

如何使用全文执行相当于 LIKE 'basebal%' 的操作?

编辑:

这是我当前的查询:

SELECT MATCH (`title`,`body`) AGAINST ('basebal') AS `relevance`,`id` FROM `blogs` WHERE MATCH (`title`,`body`) AGAINST ('basebal') ORDER BY `relevance` DESC
4

3 回答 3

6

我认为它会在最后加上一个星号: basebal*. 有关更多信息,请参阅此页面*上的运营商。

于 2010-01-14T04:16:05.693 回答
0

请参阅此链接.. 在 MySQL 中默认情况下不安装词干,但您可以自己安装..

http://oksoft.blogspot.com/2009/05/stemming-words-in-mysql.html

于 2012-07-16T11:12:30.937 回答
0

IN NATURAL LANGUAGE MODE是默认模式,与词干不兼容。尝试IN BOOLEAN MODE使用通配符...

SELECT MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) AS `relevance`, `id` FROM `blogs` WHERE MATCH (`title`, `body`) AGAINST ('basebal*' IN BOOLEAN MODE) ORDER BY `relevance` DESC

上面的例子为人们在被问到这个问题 10 年后偶然发现这个问题提供了清晰的说明。主题仍然相关,并从完整的示例中受益

于 2020-05-01T14:19:36.013 回答