日期:2014-05-17  浏览次数:20789 次

相关文章 的实现方法。
例如,我现在有一个网站 ,有 1000万条文章数据。

通过文章标题,找出每个文章的相关文章。

我想问问大家这个怎么实现。

-------------------------------------------------
我想了一个实现方法是这样的。

先把文章标题进行分词。

例如:我爱我家的装潢 (分成:我爱,我家,的,装潢 )

然后把每一个词建一个表,表里只有一个文章ID字段,

create table 我爱(
id int //文章ID
)
create table 我家(
id int
)

查询相关文章的时候。

select * from (
(select * from 我爱 )
union
(select * from 我家 ) group by id as rank
) order by rank desc limit 0,10

词是中文的,我想把中文加密成MD5值,当表名用,不过又怕MD5值重复。
这个怎么解决。

我是菜鸟。。。
-------------------------------------
------最佳解决方案--------------------
文章表(id,title,content,...)
关键词表(id,keyword)
关联表(articleid,keywordid) --一个文章有多条记录
try:
select * from 文章表 where id in(
select articleid   --查关联文章ID
from 关联表 a
where exists(select 1 from 关联表 where keywordid=a.keywordid and articleid=12345)--此为当前文章ID
group by articleid
having count(*)>=5 --关联词至少5篇
)

------其他解决方案--------------------
MD5加密是不会重复的。
------其他解决方案--------------------
MD5加密是有重复值的,虽然几率不是太高.

楼主这种设计太特别了,一般不这样处理的.
建一个关键词表,录入所有可能用到的关键词.
在文章表中添加一个关键词ID列表的字段,或者单独建一个文章关键词关联表,然后根据所给的文章标题从这个字段或表中找出关键词有较多相同的记录,这些记录的文章,就是你所要的相关文章.
------其他解决方案--------------------
哦,按照你说的这种方法, 1000W数据的话, 每个文章十个关键字, 文章关键词关联表 这个表就要有一亿条数据了,这个表查询的时候效率 不会有问题吧, 查询的时候 SQL怎么写速度最快啊。
------其他解决方案--------------------
其实很失误,我用的是mysql,本来要发到 mysql区,没想到发错地方了。

不过我相信大家也因该都懂。。。
------其他解决方案--------------------
引用:
其实很失误,我用的是mysql,本来要发到 mysql区,没想到发错地方了。

不过我相信大家也因该都懂。。。


数据库设计是一样的.

因为你有这样的需求,所以不能光从要保存多少数据来讨论,如果你用其他方法,或许保存的数据少一点,可是,执行效率可能会大打折扣,那还不如稍多保存一些数据.
再说了,这种方法应该是标准的处理方法,如果用其他方法,或许不单单执行效率差,而且数据还会有更多冗余,比如说把关键词直接保存到文章表中.
------其他解决方案--------------------
引用:
因为你有这样的需求,所以不能光从要保存多少数据来讨论,如果你用其他方法,或许保存的数据少一点,可是,执行效率可能会大打折扣,那还不如稍多保存一些数据.
再说了,这种方法应该是标准的处理方法,如果用其他方……


嗯,非常谢谢你说的这种方法。

还有你说的这种方法,查询的时候怎么查询。
是这样写吗?
select * from (select * , count(article_id) as rank from  table where keyword_id in (1,2,3,4,5,6) group by article_id ) as a order by  rank desc 

不知道还有没有别的方式。

只要大家提供方法,稍后我弄一个模拟环境,测试一下速度就知道了, 呵呵。

------其他解决方案--------------------
TB(ID,标题,文章内容).用全文检索去查询标题,根据权重来确定那一篇文章才是最接近查询关键字的。