对搜索结果按匹配字段进行优先级排序
飞哥    |    2017-02-07
搜索结果匹配优先                                     阅读(1299)
摘要: 对搜索结果按匹配字段进行优先级排序

对搜索的每条记录计算出一个排序权值来,然后将所有搜索结果按照这个排序权值进行降序排列即可。每条被搜索出的记录的排序权值为该记录所有字段的权值之和。某个字段的权值取决于该字段是否匹配关键字,如果不匹配则为0,如果匹配则为改字段的匹配权值。字段的匹配权值计算方式为:

fieldPriority = 2的i次冥(i为该字段在所有被搜索的字段优先级排序中倒排的位置)

例如,在我们示例中各字段的匹配权值为:


字段
倒排位置
匹配权值
title
4
16
description
3
9
notename
2
4
body
1
1
cate
0
0


之所以采用这种算法,是为了确保某个字段匹配的记录的排序权值不会低于另外一条不匹配该字段但后续字段都匹配的记录的排序权值。例如记录A中仅仅ProdName匹配关键字,所以它的排序权值为16,而记录B中除了字段ProdName外其他字段都匹配,则其排序权值为15(8+4+2+1=15)。但记录A仍然会排在记录B前面。


SELECT *,(  (case when INSTR(title,'中国')>0 then 16 else 0 end)+(case when INSTR(description,'中国')>0 then 9 else 0 end)+...  ) as score from rg_goods where $where_str order by score desc,... $limit_str

上一篇:没有了

下一篇:没有了