我使用mysql全文搜索,此时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
当我按照相关性限制4搜索例如"apple iphone5"订单时,我得到以下结果:
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
我想给下面的单词一个更高的相关性,或者计算相关性并进行一些排序,但不知道该怎么做?
阅读其他有类似讨论的Threads并没有真正的帮助。
还有其他想法吗?
Thx ruven
全文搜索应该是模糊的。我想你也许可以使用布尔模式和查询字符串(如'+iphone apple 5*'
,但你可能会明白为什么它可能不是很灵活。
根据你的要求,我不确定是否明智你想要回什么字。接受你会得到一些无关紧要的结果多想想哪些单词是重要的。
-编辑-
除了+
之外,您还可以使用<
和>
控制布尔搜索以增加或降低单词的相关性。我玩游戏时得到的结果通常包括包括4s在内的所有iphone,但没有其他功能。
除了最小长度外,你检查过停止语了吗?试着增加或减少数字与>
的相关性,看看这是否会改变相关性你进入了你的查询。如果没有,那么就出了问题。
-再次编辑-
事实上,"+iphone apple-4"one_answers"+iphone苹果+5*"都适用于我,忘记重新启动了mysql。我意识到这会使它变得不灵活,但我看不出你怎么能得到你想要的控制水平而不失灵活性。