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)
还有两个问题:
返回上面的2条记录
SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developers')
返回空集
SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developer')
我认为MySQL可以用'开发者'找到这些记录.但为什么它不起作用?
您可以使用布尔运算符切换到全文: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”)之类的单词。如果您的搜索表单仅限于英语,我认为您可以使用一些简单的语法规则涵盖大多数情况,并且对于每个单词,搜索该单词及其复数。如果这是错误的,它可能会导致无效的单词,该单词在您的搜索中应该是中性的。