tim-wu

2008年2月9日

Lucene的索引结构图

反向索引:

正向索引(草稿,不完全,因为收到field info的影响,不同的field存储内容不同,且fieldInfo的有些信息,TOKENIZED BINARY COMPRESSED也是保存在.fdt的每个document相关段的bits中,而不是.fnm中):
posted @ 2008-02-27 18:14 鹏飞万里 阅读(1591) | 评论 (0) | 编辑 收藏
 
Lucene和GCJ
Lucene在1.9版本的时候就已经加入了对GCJ的支持,利用GCJ编译Lucene,并且使用新的GCJIndexInput.java读写文件系统,
直接调用操作系统级别的native方法,相信读写性能能够极大得提高啊。

具体代码可见Lucene的gcj目录,编译使用ant gcj
posted @ 2008-02-14 15:27 鹏飞万里 阅读(456) | 评论 (0) | 编辑 收藏
 
备忘:lucene中的ranking算法

说明见Similarity.java的javadoc信息:


算法请参考javadoc的,它使用的是Vector Space Model (VSM) of Information Retrieval。

                针对一条查询语句q(query),一个d(document)的得分公式
score(q,d)   =   coord(q,d)  ·  queryNorm(q)  ·  ∑ ( tf(t in d)  ·  idf(t)2  ·  t.getBoost() ·  norm(t,d) )
t in q
               其中,
               tf(t in d) 表示某个term的出现频率,定义了term t出现在当前地document d的次数。 那些query中给定地term,如果出现越多次的,得分越高。它在默认实现DefaultSimilarity的公式为
tf(t in d)   =   frequency½
               idf(t) 表示反向文档频率。这个参数表示docFreq(term t一共在多少个文档中出现)的反向影响值。它意味着在越少文档中出现的terms贡献越高地分数。它在默认实现DefaultSimilarity的公式为:
idf(t)  =   1 + log (
numDocs
–––––––––
docFreq+1
)
                coord(q,d) 是一个基于在该文档中出现了多少个query中的terms的得分因素。文档中出现的query中的terms数量/query总共多少个query数量。典型的,一个文档包含越多地query中的terms会得到更高地分。This is a search time factor computed in coord(q,d) by the Similarity in effect at search time. 
                queryNorm(q) 是一个标准化参数,它是用来区分比较不同queries时的因素,这个因素不影响document ranking (因为所有的ranked document都会乘以相同的值),但是不同地queries(或这不同地indexes中)它会得到不同的可用于比较的值。This is a search time factor computed by the Similarity in effect at search time. 它在默认实现DefaultSimilarity的公式为:
queryNorm(q)   =   queryNorm(sumOfSquaredWeights)   =  
1
––––––––––––––
sumOfSquaredWeights½
                其中的sumOfSquaredWeights(of the query terms)是根据the query Weight object计算出来的. For example, a boolean query computes this value as:
sumOfSquaredWeights   =   q.getBoost() 2  ·  ∑ ( idf(t)  ·  t.getBoost() ) 2
t in q
 
                t.getBoost() 是一个term t在query q中的search time boost, 它是在the query text (see query syntax)中指定的, 或者被应用程序直接调用setBoost()设置的. 注意,这儿没有直接的API去访问在 a multi term query的一个term的boost值,但是multi terms会以multi TermQuery objects在一个query中被表示,因此the boost of a term in the query可以使用子query的getBoost()反问到. 
                norm(t,d) 封装(encapsulates)了一些(indexing time)的boost和length factors:  ???这个参数之和field中tokens的数量有关,和term本身无关???
                          Document boost - set by calling doc.setBoost() before adding the document to the index.
                          Field boost - set by calling field.setBoost() before adding the field to a document.
                          lengthNorm(field) -。当文档被加入到索引时计算,,和document的field中的tokens的数量有关,因此,一个比较短的fields贡献更高的分数。LengthNorm  is computed by the Similarity class in effect at indexing. DefaultSimilarity中的实现为(float)(1.0 / Math.sqrt(numTerms));
                    当一个文档被加入索引时,上述因素会被相乘。如果文档有多个fields同名,他们的boosts数值会被多次相乘。
 
 
norm(t,d)   =   doc.getBoost()  ·  lengthNorm(field)  ·  ∏ f.getBoost()
field f in d named as t
                     但是,计算出的norm数值在存储时是使用一个a single byte编码的。search时,这个norm byte从index directory读取,并且被解码回float。这个编码/解码算法会产生精度丢失。 - it is not guaranteed that decode(encode(x)) = x. For instance, decode(encode(0.89)) = 0.75. Also notice that search time is too late to modify this norm part of scoring, e.g. by using a different Similarity for search. 
posted @ 2008-02-09 17:58 鹏飞万里 阅读(1869) | 评论 (0) | 编辑 收藏
 
 
<2008年2月>
日一二三四五六
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

 导航

  • BlogJava
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 28
  • 文章: 0
  • 评论: 38
  • 引用: 1

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(4)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

我参与的团队

  • WebGIS开发设计组(0/0)

随笔档案

  • 2008年2月 (4)
  • 2008年1月 (6)
  • 2007年12月 (2)
  • 2007年11月 (2)
  • 2007年9月 (8)
  • 2007年3月 (1)
  • 2006年5月 (4)
  • 2006年4月 (1)

搜索

  •  

最新评论

  • 1. re: 关于Javascript的内存泄漏问题的整理稿
  • 很有帮助!谢谢
  • --selma
  • 2. re: 关于Javascript的内存泄漏问题的整理稿
  • 对象是值传递的,所以第一段代码不可能是js对象和dom对象的循环引用,而是dom自身的循环引用
  • --axiheyhey
  • 3. re: 关于Javascript的内存泄漏问题的整理稿[未登录]
  • 评论内容较长,点击标题查看
  • --鹏飞万里
  • 4. re: 关于Javascript的内存泄漏问题的整理稿
  • 评论内容较长,点击标题查看
  • --goofect
  • 5. re: 关于Javascript的内存泄漏问题的整理稿
  • 评论内容较长,点击标题查看
  • --goofect

阅读排行榜

  • 1. 关于Javascript的内存泄漏问题的整理稿(18618)
  • 2. 关于google map api中的球平投影算法接口: GProjection和GMercatorProjection类(4827)
  • 3. Lucene如何控制segments的数量?(4682)
  • 4. javascript的prototype(2526)
  • 5. Java7 VB2008都开始支持Lambda(Closure)了(2369)

评论排行榜

  • 1. 关于Javascript的内存泄漏问题的整理稿(17)
  • 2. 关于google map api中的球平投影算法接口: GProjection和GMercatorProjection类(7)
  • 3. 备忘: UTF-8的格式(3)
  • 4. Lucene如何控制segments的数量?(3)
  • 5. 复杂度为log(n)的排序堆栈算法(2)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 鹏飞万里