内链的重要性不用我多讲大家应该都知道了。内链(外链也一样)的好坏相关度是很重要的指标。本文以discuz程序为例,浅述怎样利用coreseek全文搜索系统建设高相关性的内链。/ |! F: z1 ?0 j, W; R+ g
' j z. w7 B- d) N0 R1 S9 T% w
一、现状
/ |5 Z# b$ b; ~9 t' `; l2 j
' u' U7 _4 c9 M' v( \) J 现在自动生产内链一般有两种方法:一是通过插入有相同tag的内链;二是预先指定关键词,在文章内遇到相应关键词则自动插入内链的方法来做内链。
) ]0 V4 L+ ]6 O" T( U$ Q1 c) x7 e) U1 S5 O* l& W2 g
不过这两种方法各有缺点,前一种方法如果是自动生成tag的话常常用生成大量没有的tag,相关度也没法保证,如果手动设置tag的话则是一项长期的非常繁琐工作;后一种方法要手动预设关键词,一来繁琐,二来没有预设的关键则不会自动生成内链,三来这种方法- ~8 X* C, b# k8 }8 v! L. Q0 |
. J) L( h6 e( R+ Y 一般是中要遇到相应关键词则生成同一内链相关性不一定高。
/ x O i+ i* E/ }% p: L7 d; M# y; }$ C% ]% [
disuz自带的相关帖子功能也分为两种。一种是tag实现的,存在上面说的缺点;另一种为是纵横搜索带的,不过坑爹的是这种相关帖子是用javascript实现的,对于seo基本没用。5 j" {8 Z/ ~- U( B! c8 Q9 I
/ p' F% C* G! I
二、怎样才能自动生成相关度高的内链呢?- f9 J7 @, Q$ ]7 _ U3 I
- h* E+ O+ L) b) x
首先要解决的如何判断相关度高低的问题。我们可以用目标文章的标题去跟数据库中存在的文章标题或全文用类似Levenshtein之类算法作比较,找出相关性高的前一个或数个来做内链,而不是简单的捕捉某个特定的关键词或者tag。; B, w- p& H' m j
- c$ L- h/ F" L3 B, i+ d( n 据我所了解coreseek全文搜索系统采用基于短语相似度和统计(BM25)的复合Ranking方法,可以轻松高效实现这样的功能,我们可以方便地拿来使用,有能力的也可以自己写程序来实现。
& V2 X) c7 g) K2 J
9 ] w$ h) P+ L3 U+ w7 Q 三、下面以discuz为例说明如何实现。. h- O# \5 `3 U6 ]9 m& [( J
$ `; r: `/ B b
思路如下:每当贴子被访问时自动拿帖子的标题去coreseek里搜索,找出匹配度高的文章。然后把找到的文章链接添加到帖子中。
+ \3 z( U& ~6 u: {' N) l7 @" W8 c% ]
1、首先要先正确安装coreseek,安装方法可以参考官网或我的网站四季服装网www#4ji#cn里找<<架设discuz下的coreseek全文搜索服务器及自建个性化分词词库>>这人贴子。安装看着很复杂,其实安装不难,跟着教程一步步做就行了。" u1 o0 v6 T K& d! ^$ F
9 `( N. d3 e5 R9 ~& z. f8 t( W- S 2、写一个discuz的插件实现上面所说的功能:
) |" m. z9 D/ z4 h1 \0 r7 q# g* a
不懂编程的先别飙汗,插件已经写好,下面会给出下载链接。
: X/ E# R7 ]3 }0 e v/ i1 N
) B1 Z% X! R9 J- F7 S+ q 这里只大概说一下插件的工作原理是:discuz的模版里面放了很多hook钩子,这里我们使用viewthread_postbottom,打开贴子后,viewthread_postbottom触发插件中的对应方法,该方法拿拿帖子的标题去coreseek里搜索,找出匹配度高的文章。
' q8 Y/ l) K: L2 F9 x+ E ]
7 ~- F, r; o6 v2 h- D% q9 z8 O 然后把找到的文章链接添加到帖子中。# J6 L" a/ q3 w
|