PHP China | 中国开源之路 's Archiver

kth007 发表于 2008-9-22 12:27

求助一个分词搜索结果的排序问题,高手帮忙!!!!!!

比如某个关键字:室内设计师
分词后得到的结果为 室内 设计师 那么将匹配 室内和设计师 两个关键字

然后一个表 有两个字段分别是

标题                           概述
title                            description
室内设计师                室内+设计师+室内设计师            共出现3次
北京设计师                室内+设计师+室内设计师            共出现4次
设计师                       室内+设计师+室内设计师            共出现5次  

那么我需要的到的结果是
先按标题来 如果全匹配所有关键字 那么就排最上面
然后根据     标题和概述里出现的次数 倒序排列!   


怎么样进行排序

搜索的SQL 为

select *  from table where
(CONCAT(title,' ',description,' ') like '%室内设计师%' )
OR (CONCAT(title,' ',description,' ') like '%室内%' )
OR (CONCAT(title,' ',description,' ') like '%设计师%')


求高人帮忙!

异度冰晶 发表于 2008-9-22 13:02

[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]

剩下的排序就不说了

kth007 发表于 2008-9-22 14:05

[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条数据做排序 应该可以
但第二页 出现的 应该比第一页出现的 要 不重要多。。。。

异度冰晶 发表于 2008-9-22 14:24

[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语法

kth007 发表于 2008-9-22 16:49

[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]

麻烦给个例子 或者 说的详细些!不是很明白!?

kth007 发表于 2008-9-22 18:29

自己顶  第一次搞???

asu530 发表于 2008-11-19 21:54

有熟悉的人出来指点一下么?

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.