mysql fulltextsearch处理短语

时间:2014-03-23 14:44:43

标签: mysql full-text-search

我现在使用ftql全文搜索和ft_min_word_len = 3.

这是查询:

SELECT * FROM (
  SELECT title, MATCH(title) AGAINST('Apple Iphone 5') AS REL 
    FROM my_items
  ) AS items
WHERE REL > 0
ORDER BY REL 
DESC LIMIT 3

表格中的我的测试项目:

apple iphone 4
apple MacBook MTB5543659
apple iphone 5
apple ipad
iphone 4 
iphone 5S  

当我搜索例如" apple iphone 5"按相关性排序限制4我得到以下结果:

apple iphone 4
apple iphone 5
apple MacBook MTB5543659
apple ipad

当我将ft_min_word_len减少到1时,除了更大数据的性能问题之外,我得到了用户不期望的结果:

apple iphone 5
apple iphone 4
apple MacBook MTB5543659    
apple ipad

修改

尝试布尔模式。

MATCH(title) AGAINST('Apple Iphone 5*' IN BOOLEAN MODE) AS REL 

结果是

apple iphone 5
apple iphone 4
apple MacBook MTB5543659
iphone 5S  

MATCH(title) AGAINST('+Apple Iphone 5*' IN BOOLEAN MODE) AS REL 

结果是

apple iphone 5
apple iphone 4
apple MacBook MTB5543659
apple ipad

那么我该怎么做才能获得如下结果:

apple iphone 5
iphone 5s

我认为要给出更确切的关联词或计算相关性并做一些分类,但不知道怎么做taht?

通过类似的讨论阅读其他主题并没有真正帮助。

其他一些想法?

Thx ruven

1 个答案:

答案 0 :(得分:1)

全文搜索应该是模糊的。我想你可能会 通过使用布尔模式和查询字符串来获得您要求的结果 '+iphone apple 5*',但你可能会明白为什么它可能不是很灵活。

根据您的要求,我不确定明智之举 你想要什么词回来。接受你会得到一些不相关的结果 并且更多地考虑哪些词是重要的。

-edit -

除了+,您还可以使用<>控制布尔搜索,以增加或 降低单词的相关性。我在玩游戏时得到的结果通常包括 包括4s在内的所有iphone,但不包括其他任何内容。

除了最小长度外,您是否检查过停用词?尝试使用>增加或减少数字的相关性,看看是否会改变相关性 你进入你的查询。如果它没有,那么就会出现问题。

- 再次编辑 -

其实&#39; + iphone apple -4&#39;和&#39; + iphone apple +5 *&#39;对我有用,忘了重启 MySQL的。我意识到这使它变得不灵活,但我无法看到你如何得到你想要的 控制水平而不是不灵活。