按相关性排序匹配或搜索确切的短语

时间:2013-12-18 11:54:24

标签: mysql full-text-search

我想在一列中搜索多个值,我希望我的查询返回确切的搜索短语(在本例中为标记)

这是我的查询

SELECT *
FROM `image_tags`
WHERE
MATCH (
tag
)
AGAINST (
'"yy yy"' '"xxxx"' IN BOOLEAN MODE
)
LIMIT 40 

但我得到了许多不需要的结果,其中只有部分搜索过的标签

xxxx
aaxaa
bbxb
yy yy

我没关系,但至少我希望结果按搜索标签的相关性进行排序,我有这个,但它不起作用

SELECT * , MATCH (
tag
)
AGAINST (
'"yy yy"' '"xxxx"' IN BOOLEAN MODE
) as rel
FROM `image_tags`
WHERE
MATCH (
tag
)
AGAINST (
'"yy yy"' '"xxxx"' IN BOOLEAN MODE
)
order by rel desc 
LIMIT 30 

* btw我的搜索标签是波斯语而不是英语*

这是我的执行查询

SELECT *
FROM `image_tags`
WHERE
MATCH (
tag
)
AGAINST (
'"مردم تبریز" "ماسوله"'
)
LIMIT 40 

这是结果(我在列表中添加了不需要的结果的星标)

    id      image_id tag
    342145  123566  مردم تبریز
    342413  123564  مردم تبریز
    342143  123567  مردم تبریز
    342142  123569  مردم تبریز
    342137  123572  مردم تبریز
    342414  123561  مردم تبریز
    294921  106946  ترس از مردم = سلطه مردم بر من   ******   
    80529   29913   ماسوله
    452056  160815  ماسوله
    449178  159809  ماسوله
    75373   28164   ماسوله
    75402   28164   ماسوله
    13928   10031   ماسوله 2      ***********
    13927   10030   ماسوله
    358365  129393  کوه های ماسوله   ***************

1 个答案:

答案 0 :(得分:0)

正如String Literals所述:

  

彼此相邻的引号字符串连接成一个字符串。以下几行是等效的:

'a string'
'a' ' ' 'string'

因此,"مردم تبریز" "ماسوله"相当于"مردم تبریزماسوله"。你应该引用整个字符串文字,它本身包含引用的元素,例如: '"مردم تبریز" "ماسوله"'。也就是说,改变:

MATCH (tag) AGAINST ("مردم تبریز" "ماسوله" IN BOOLEAN MODE)

对此:

MATCH (tag) AGAINST ('"مردم تبریز" "ماسوله"' IN BOOLEAN MODE)