我现在使用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
答案 0 :(得分:1)
全文搜索应该是模糊的。我想你可能会
通过使用布尔模式和查询字符串来获得您要求的结果
'+iphone apple 5*'
,但你可能会明白为什么它可能不是很灵活。
根据您的要求,我不确定明智之举 你想要什么词回来。接受你会得到一些不相关的结果 并且更多地考虑哪些词是重要的。
-edit -
除了+
,您还可以使用<
和>
控制布尔搜索,以增加或
降低单词的相关性。我在玩游戏时得到的结果通常包括
包括4s在内的所有iphone,但不包括其他任何内容。
除了最小长度外,您是否检查过停用词?尝试使用>
增加或减少数字的相关性,看看是否会改变相关性
你进入你的查询。如果它没有,那么就会出现问题。
- 再次编辑 -
其实&#39; + iphone apple -4&#39;和&#39; + iphone apple +5 *&#39;对我有用,忘了重启 MySQL的。我意识到这使它变得不灵活,但我无法看到你如何得到你想要的 控制水平而不是不灵活。