MySQL全文搜索复数/单数形式的单词

hun*_*eox 5 mysql full-text-search

我有一张这样的桌子

CREATE TABLE jobs(
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)

并且在此表中有两条记录

...
7. 10 Senior PHP Developers (Leaders) 
8. 30 PHP Developers..
...
Run Code Online (Sandbox Code Playgroud)

还有两个问题:

  1. 返回上面的2条记录

    SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developers')

  2. 返回空集

    SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developer')

我认为MySQL可以用'开发者'找到这些记录.但为什么它不起作用?

Tch*_*upi 5

您可以使用布尔运算符切换到全文:http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

并搜索:

SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developer*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

您将首先获得“developer”的匹配项,然后是“developers”或任何以“developer”开头的字符串。对于“开发者”这样的长而精确的单词来说是没问题的,但例如搜索“汽车*”可能会导致大量意想不到的结果,例如“卡”、“小豆蔻”……

我认为MySQL全文搜索中没有语法分析。我今天实际上正在研究这个问题,但没有发现更好的东西。

编辑

此方法不适用于诸如“party”(复数:“partys”)之类的单词。如果您的搜索表单仅限于英语,我认为您可以使用一些简单的语法规则涵盖大多数情况,并且对于每个单词,搜索该单词及其复数。如果这是错误的,它可能会导致无效的单词,该单词在您的搜索中应该是中性的。