2010-06-15 76 views
1

我发现布尔模式的MySQL全文搜索有用,但有一些事情我似乎无法弄清楚如何实现。MySQL全文搜索布尔模式部分匹配

例如,假设我有一个包含单词“史蒂夫的Javascript教程 - 第一部分”的全文列。

我想匹配这对于每个以下搜索:“教程”,“javascript教程”,“Java”的,“Java脚本”,“脚本”

试想一下,每一个这些搜索的根本分配给任何可能正在使用的语言的变量(我总是使用PHP)。

我该如何修改这个以确保Steve的文章在每次搜索时都被返回?

MATCH(ARTICLE_TITLE)AGAINST( ' “+ $变量+” *' IN BOOLEAN MODE)

回答

0

这是不可能的;)

当你搜索 “教程” 的条目不会被发现,因为数据库中的条目是单数,搜索词是复数。在将值插入数据库(和搜索)之前,您应该执行某种形式的“词干”。

完成此操作后,表达式将起作用。对于包含更多单词(空格)的搜索词,您应该为每个单词添加星号。

+0

想象一下,用户将文本输入到搜索表单中的场景。在每个单词之间使用星号将适用于“java脚本”。然而,想象他们正在寻找“伦敦巴黎”,这将需要返回“我从伦敦到巴黎的旅程”以及“我从巴黎到伦敦的旅程”。所以使用伦敦*巴黎将无法工作。相反,需要的是+伦敦+巴黎。但是,这当然不适用于“+ java + script”示例。有没有办法满足这两个例子,因为这将用于用户输入。 – Rob 2010-06-15 18:20:38

+0

当用户提交拼写错误的单词(Java和Script之间的空格)时,您无法使用mysql布尔模式进行更正。 你将不得不执行拼写检查或使用模糊搜索,但模糊搜索不可能与MySQL – 2010-06-15 18:49:27