摘要:顾名思义这章就是要谈怎样构造索引的问题,或者说在有限内存和有限时间内,怎么样高效的对大数据集构造索引文件。一旦有了这个索引文件,那么索引的压缩,基于索引的排序,前面的章节都已经讲过。 链接列表 先来看看最一般的方法,在内存中构建这样的数据结构,包含一个term字典,这个字典本身可以用数组,hash表,二分查找树来实现,字典中的每 项,都包含一个指向term的倒排列表的指针,那么对于一个term的倒...
阅读全文
摘要:查询 就是如何利用建好的索引来找到想要的文本,那么会介绍两种查询,一种是布尔查询(Boolean Query),另一种是排名查询(Ranked Query).布尔查询 包含了一个术语列表,这些术语通过布尔操作符相连(and,or,not),查询的答案是满足规定条件的文档。布尔查询的缺点是会不可避免的返回很多无关的答案,而且查询一些小的变动会导致结果完全不同。因为布尔查询是机械的,必须精确匹配布尔...
阅读全文
摘要:在这个信息爆炸的年代, 信息索引的重要性不言而喻。现在主要的索引结构就是倒排索引,又称为记录文件(posting file),词汇索引(concordance)。其他的还有签名文件(signature file), 和 位图(bitmap)。倒排索引 倒排索引在结构上分为,倒排列表(inverted list)和字典, 倒排列表就是记录一列指针, 每个指针表示了术语所在的文档的编号,甚至是在文档中的位置。而字典就是记录了术语和倒排列表的对应关系。举个例子,cold (2;1,4)表示cold这个词出现了2次,分别在第1和第4号文档里面。那么索引有个粒度的问题,上面的例子的索引的粒度是文档级的,
阅读全文
摘要:开门见山,文本压缩可以归纳为两大类, 符号方法和字典方法, 下面分别介绍下: 1)符号方法,symbolwise method普通编码方式是每个字符都采用相同位数编码, 比如asc码, 每个字符都是8位编码。那么现在要压缩,就是要用更少的位数来表示字符。显而易见, 我们只须用较小的位数来表示高概率字符, 用较长的位数来表示低概率字符,这样平均下来就可以实现压缩。那么这里面就有两个点:a)怎么来确...
阅读全文
摘要:Leveraging term vectors所谓term vector, 就是对于documents的某一field,如title,body这种文本类型的, 建立词频的多维向量空间.每一个词就是一维, 这维的值就是这个词在这个field中的频率. 如果你要使用term vectors, 就要在indexing的时候对该field打开term vectors的选项:
Field options f...
阅读全文
摘要:一. Nutch作为用lucene实现的开源search engine怎么使用lucene的了.Nutch用了许多个的lucene indexes放在不同的server上, 因为是面对Web-scale的, document数目在1-10billion量级, 非常的多, 必须用许多机器同时去进行index和search操作. 而且在query的时候需要快速反应, 不能因为某个server crash了而影响正常的query.Nutch的query architecture是相当简单的, 描述如下:1. HTTP server接受到用户request.有个叫Query Handler的servl
阅读全文
摘要:Analysis, in Lucene, is the process of converting field text into its most fundamental indexed representation, terms.这个分析的步骤不一定的, 一般会包含如下:extracting words, discarding punctuation, removing accents from characters, lowercasing (also called normalizing), removing common words, reducing words to a root
阅读全文
摘要:一. 用lucene怎么完成search1. 创建IndexSearcherIndexSearcher searcher = new IndexSearcher(directory);2. 生成需要搜索的词Term t = new Term("subject", "ant");3. 创建查询Query query = new TermQuery(t);4. search并得到结果Hits hits = searcher.search(query);此处的query就简单的由term生成的, 对于复杂的query需要用QueryParser来生成Query
阅读全文
摘要:一. Index之前要做什么1. 将要index的内容转化为文本你要处理的文件可能是PDF, word, html, OK通通转化成文本, lucene只能处理文本2.分析文本在index之前, 必须对文本做一系列的分析, 对文本的token化, 就是分词. 然后滤掉一些没有区分度的词, 如stop word这个地方涉及语言相关性. 不同语言的处理会不同. 英文还要处理大小写, 派生词. 这一步对于index非常重要, 所以在lucene中选取和开发合适的analysizor是关键的一步.3. 写入index这步就是真正的去做index了,lucene采用的是inverted index, 即
阅读全文