我有一个搜索表单搜索网站内容表,以拉回适当的结果。
我想搜索标题和内容字段,并按相关性顺序拉回结果。给予标题最高优先级。
假设我们有一张表(tblContent),
intID | strTitle | txtContent
1 | Smith John | Lorem Ipsum
2 | Lorem Ipsum | Lorem John Smith Ipsum
3 | John Smith | Lorem Ipsum Lorem Ipsum
4 | Lorem Ipsum | Lorem Ipsum Lorem Ipsum
5 | Lorem Ipsum | Lorem Ipsum Smith John
你在搜索"John Smith“结果应该是3,2,1,5
这怎麽可能?
发布于 2013-02-22 22:33:48
我设法做到了这一点:
SELECT *,
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance
FROM content
WHERE (MATCH(strTitle,txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE) )
ORDER BY relevance DESC
发布于 2013-12-19 23:57:06
mysql全文搜索是一件好事,但它有一个最少4个字符的词被索引的限制。虽然限制是可以改变的,但是改变服务器变量并不是在所有情况下都是可能的。在这种情况下,我推荐按情况顺序建议的解决方案。
select
*
from
mytable a
WHERE
(a.title like 'somthing%'
OR a.title like '%somthing%'
OR a.title like 'somthing%')
ORDER BY case
WHEN a.title LIKE 'somthing%' THEN 1
WHEN a.title LIKE '%somthing%' THEN 2
WHEN a.title LIKE '%somthing' THEN 3
ELSE 4 END;
发布于 2013-02-22 22:23:49
可能有一种更有效的方法,考虑到搜索字符串可能超过2个单词,这可能是不可行的,但我会这样做
ORDER BY CASE
WHEN strTitle LIKE '%John Smith%' THEN 1
WHEN txtContent LIKE '%John Smith%' THEN 2
WHEN strTitle LIKE '%Smith John%' THEN 3
WHEN txtContent LIKE '%Smith John%' THEN 4
ELSE 5 END
https://stackoverflow.com/questions/15026244
复制相似问题