v1.0 可编辑可修改 ( score(q,d) = coord(q,d) · queryNorm(q) · tf(t in d) · idf(t)2 · () · n∑ t in orm(t,d) ) q 其中:
tf(t in d) 关联到项频率,项频率是指 项 t 在 文档 d 中出现的次数 frequency。默认的实现是:
?
tf(t in d) = frequency
idf(t) 关联到反转文档频率,文档频率指出现 项 t 的文档数 docFreq。docFreq 越少 idf 就越高。默认实现:
numDocs
idf(t) = 1 + log ( ––––––––– )
docFreq+1
coord(q,d) 评分因子,是基于文档中出现查询项的个数。越多的查询项在一个文档中,说明些文档的匹配程序越高。默认是出现查询项的百分比。
queryNorm(q)查询的标准查询,使不同查询之间可以比较。此因子不影响文档的排序,因为所有有文档都会使用此因子。默认值:
1
queryNorm(q) = queryNorm(sumOfSquaredWei––––––––––––
ghts) =
––
sumOfSquaredWeights?
16
v1.0 可编辑可修改 每个查询项权重的平分方和(sumOfSquaredWeights)由 Weight 类完成。例如 BooleanQuery 地计算:
2
sumOfSquaredWeights = () ·
∑ ( idf(t) · () )
2
t in q
()查询时期的 项 t 加权(如:java^),或者由程序使用 setBoost()。 norm(t,d)压缩几个索引期间的加权和长度因子: Document boost - 文档加权,在索引之前使用 () Field boost - 字段加权,也在索引之前调用 ()
lengthNorm(field) - 由字段内的 Token 的个数来计算此值,字段越短,评分越高,在做索引的时候由 计算。
以上所有因子相乘得出 norm 值,如果文档中有相同的字段,它们的加权也会相乘:
norm(t,d) = () · lengthNorm(field) ·
∏
()
field f in d named as t
索引的时候,把 norm 值压缩(encode)成一个 byte 保存在索引中。搜索的时候再把索引中 norm 值解压(decode)成一个 float 值,这个 encode/decode 由 Similarity 提供。
solr使用了Lucene的内核,也继承了Lucene的打分规则,我们可以根据自己的应用实现评分算法,换掉默认的;也可以使用默认的,利用修改solr配置文件,来调节评分。
Page Rank算法 一个网页的重要性等于指向它的所有网页的重要性相加之和。 如果网页j存在一个指向网页i的连接,则表明j的所有者认为i比较重要,从而把j的一部分重要性得分赋予i。这个重要性得分值为:PR(pj)L(pj) 17
v1.0 可编辑可修改 PR(pj)为网页j的PageRank值,L(pj)为网页j的出链数。 一个页面的PageRank是由所有链向它的页面(链入页面)的重要性经过递归算法得到的。一个有较多链入的页面会有较高的等级,相反如果一个页面没有任何链入页面,那么它没有等级。 由于存在一些出链为0,也就是那些不链接任何其他网页的网, 也称为孤立网页。因此需要对 PageRank公式进行修正,即在简单公式的基础上增加了阻尼系数(damping factor)q, q一般取值q=。 PR(pi)?PR(pj)1?q ?(q)?pjNL(pj)PR(pi)即网页i的PageRank值;所以公式的意义是:网页i的PageRank值=(1-d)+d*(链接到网页i的所有PR值/该网页的所有出链数量之和)。
信息采集搜索系统的安装
本系统采用分布式集群进行信息的采集与搜索,集群的配置情况如下图:
表() 系统配置
序号 1 名称 描述 使用MapReduce进行并行爬取,使用HDFS存储数据,Nutch的任务提交在Hadoop集群上,支持分布式 2 3 主要负责爬取数据,支持分布式 主要负责检索,对爬完后的数据进行搜索,查询,海量数据支持分布式 4 5 6 18
Linux系统,在上面运行hadoop、nutch等应用 应用服务器,给Solr提供容器运行 提供JAVA运行环境 v1.0 可编辑可修改 7 8 IKAnalyzer 提供Nutch等源码编译 对网页内容与标题进行分词,便于全文检索 hadoop系统的运行环境配置
hadoop需要在Java环境和Unix系统下运行,也可以跨平台运行,本系统是在linux操作系统下运行,需要配置完成以下运行环境:
Java环境: 版本 vi /etc/profile export JAVA_HOME=/usr/ export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 从而完成所需要的java环境配置。
hadoop集群配置:我在这里做了5个机器的hadoop集群
在 上 vi /etc/profile
export HADOOP_HOME=/home/hadoopmaster/ PATH=$PATH:$HADOOP_HOME/bin
19
v1.0 可编辑可修改 vi /etc/hosts localhost
localhost
配置无密码登录,在这里我不做介绍。 进入下 vi masters slaves vi conf /
20