求助一个分词搜索结果的排序问题,高手帮忙!!!!!!
比如某个关键字:室内设计师分词后得到的结果为 室内 设计师 那么将匹配 室内和设计师 两个关键字
然后一个表 有两个字段分别是
标题 概述
title description
室内设计师 室内+设计师+室内设计师 共出现3次
北京设计师 室内+设计师+室内设计师 共出现4次
设计师 室内+设计师+室内设计师 共出现5次
那么我需要的到的结果是
先按标题来 如果全匹配所有关键字 那么就排最上面
然后根据 标题和概述里出现的次数 倒序排列!
怎么样进行排序
搜索的SQL 为
select * from table where
(CONCAT(title,' ',description,' ') like '%室内设计师%' )
OR (CONCAT(title,' ',description,' ') like '%室内%' )
OR (CONCAT(title,' ',description,' ') like '%设计师%')
求高人帮忙! [php]
//首先,对于所有取出来的结果用正则分析其标题,具体数组操作略,只写主要语句
$par = '/室内设计师/';
preg_match($par, $title);
//假如能匹配到未拆分前的关键字,那么就一定能全匹配所有关键字,满足优先条件,然后将这条记录提出来,单独存放到优先数组中
//接着,计算标题和内容中关键字的数量
$par = '/室内|设计师/';
preg_match($par, $title . $content, $result);
$count1 = count($result[0]);
$par = '/室内设计师/';
preg_match($par, $title . $content, $result);
$count2 = count($result[0]);
//该记录的关键字匹配量为$count1+$count2
[/php]
剩下的排序就不说了 [quote]原帖由 [i]异度冰晶[/i] 于 2008-9-22 13:02 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=611741&ptid=80640][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
//首先,对于所有取出来的结果用正则分析其标题,具体数组操作略,只写主要语句
$par = '/室内设计师/';
preg_match($par, $title);
//假如能匹配到未拆分前的关键字,那么就一定能全匹配所有关键字,满足优先条 ... [/quote]
我感觉应该在SQL 里进行操作,
搜索结果有分页,每次取10页,如果只对 10条数据做排序 应该可以
但第二页 出现的 应该比第一页出现的 要 不重要多。。。。 [quote]原帖由 [i]kth007[/i] 于 2008-9-22 14:05 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=611923&ptid=80640][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
我感觉应该在SQL 里进行操作,
搜索结果有分页,每次取10页,如果只对 10条数据做排序 应该可以
但第二页 出现的 应该比第一页出现的 要 不重要多。。。。 [/quote]最好不要扔给SQL来做,这个类似一个搜索引擎,数据库的压力是很大的。
如果你想用SQL来做的话,可以去看看REGEXP语法 [quote]原帖由 [i]异度冰晶[/i] 于 2008-9-22 14:24 发表 [url=http://bbs.phpchina.com/redirect.php?goto=findpost&pid=611951&ptid=80640][img]http://bbs.phpchina.com/images/common/back.gif[/img][/url]
最好不要扔给SQL来做,这个类似一个搜索引擎,数据库的压力是很大的。
如果你想用SQL来做的话,可以去看看REGEXP语法 [/quote]
麻烦给个例子 或者 说的详细些!不是很明白!? 自己顶 第一次搞??? 有熟悉的人出来指点一下么?
页:
[1]
