最近在做问答系统,自己在园子里面找了下资料,觉得不错,自己是菜鸟原创不行,废话不多说了,送上资料。
第一个是关于Lucene的分词技术
这里可以下载PDF看,Lucene 原理与代码分析完整版
目录如下:
目录
目录
第一篇:原理篇
第一章:全文检索的基本原理
一、总论
二、索引里面究竟存些什么
三、如何创建索引
第一步:一些要索引的原文档(Document)。
第二步:将原文档传给分次组件(Tokenizer)。
第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)。
第四步:将得到的词(Term)传给索引组件(Indexer)。
1. 利用得到的词(Term)创建一个字典。
2. 对字典按字母顺序进行排序。
3. 合并相同的词(Term)成为文档倒排(Posting List)链表。
四、如何对索引进行搜索?
第一步:用户输入查询语句。
第二步:对查询语句进行词法分析,语法分析,及语言处理。
1. 词法分析主要用来识别单词和关键字。
2. 语法分析主要是根据查询语句的语法规则来形成一棵语法树。
3. 语言处理同索引过程中的语言处理几乎相同。
第三步:搜索索引,得到符合语法树的文档。
第四步:根据得到的文档和查询语句的相关性,对结果进行排序。
1. 计算权重(Term weight)的过程。
2. 判断Term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(VSM)。
第二章:Lucene的总体架构
第二篇:代码分析篇
第三章:Lucene的索引文件格式
一、基本概念
二、基本类型
三、基本规则
1. 前缀后缀规则(Prefix+Suffix)
2. 差值规则(Delta)
3. 或然跟随规则(A, B?)
4. 跳跃表规则(Skip list)
四、具体格式
4.1. 正向信息
4.1.1. 段的元数据信息(segments_N)
4.1.2. 域(Field)的元数据信息(.fnm)
4.1.3. 域(Field)的数据信息(.fdt,.fdx)
4.1.3. 词向量(Term Vector)的数据信息(.tvx,.tvd,.tvf)
4.2. 反向信息
4.2.1. 词典(tis)及词典索引(tii)信息
4.2.2. 文档号及词频(frq)信息
4.2.3. 词位置(prx)信息
4.3. 其他信息
4.3.1. 标准化因子文件(nrm)
4.3.2. 删除文档文件(del)
五、总体结构
第四章:Lucene索引过程分析
一、索引过程体系结构
二、详细索引过程
1、创建IndexWriter对象
2、创建文档Document对象,并加入域(Field)
3、将文档加入IndexWriter
4、将文档加入DocumentsWriter
4.1、得到当前线程对应的文档集处理对象(DocumentsWriterThreadState)
4.2、用得到的文档集处理对象(DocumentsWriterThreadState)处理文档
4.3、用DocumentsWriter.finishDocument结束本次文档添加
5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理
6、关闭IndexWriter对象
6.1、得到要写入的段名
6.2、将缓存的内容写入段
6.3、生成新的段信息对象
6.4、准备删除文档
6.5、生成cfs段
6.6、删除文档
第五章:Lucene段合并(merge)过程分析
一、段合并过程总论
1.1、合并策略对段的选择
1.2、反向信息的合并
二、段合并的详细过程
2.1、将缓存写入新的段
2.2、选择合并段,生成合并任务
2.2.1、用合并策略选择合并段
2.2.2、注册段合并任务
2.3、段合并器进行段合并
2.3.1、合并存储域
2.3.2、合并标准化因子
2.3.3、合并词向量
2.3.4、合并词典和倒排表
第六章:Lucene打分公式的数学推导
第七章:Lucene搜索过程解析
一、Lucene搜索过程总论
二、Lucene搜索详细过程
2.1、打开IndexReader指向索引文件夹
2.1.1、找到最新的segment_N文件
2.1.2、通过segment_N文件中保存的各个段的信息打开各个段
2.1.3、得到的IndexReader对象如下
2.2、打开IndexSearcher
2.3、QueryParser解析查询语句生成查询对象
2.4、搜索查询对象
2.4.1、创建Weight对象树,计算Term Weight
2.4.2、创建Scorer及SumScorer对象树
2.4.3、进行倒排表合并
2.4.4、收集文档结果集合及计算打分
2.4.5、Lucene如何在搜索阶段读取索引信息
第八章:Lucene的查询语法,JavaCC及QueryParser
一、Lucene的查询语法
二、JavaCC介绍
2.1、第一个实例——正整数相加
2.2、扩展语法分析器
2.3、第二个实例:计算器
三、解析QueryParser.jj
3.1、声明QueryParser类
3.2、声明词法分析器
3.3、声明语法分析器
第九章:Lucene的查询对象
1、BoostingQuery
2、CustomScoreQuery
3、MoreLikeThisQuery
4、MultiTermQuery
4.1、TermRangeQuery
4.2、NumericRangeQuery
5、SpanQuery
5.1、SpanFirstQuery
5.2、SpanNearQuery
5.3、SpanNotQuery
5.4、SpanOrQuery
5.5、FieldMaskingSpanQuery
5.6、PayloadTermQuery及PayloadNearQuery
6、FilteredQuery
6.1、TermsFilter
6.2、BooleanFilter
6.3、DuplicateFilter
6.4、FieldCacheRangeFilter<T>及FieldCacheTermsFilter
6.5、MultiTermQueryWrapperFilter<Q>
6.6、QueryWrapperFilter
6.7、SpanFilter
6.7.1、SpanQueryFilter
6.7.2、CachingSpanFilter
第十章:Lucene的分词器Analyzer
1、抽象类Analyzer
2、TokenStream抽象类
3、几个具体的TokenStream
3.1、NumericTokenStream
3.2、SingleTokenTokenStream
4、Tokenizer也是一种TokenStream
4.1、CharTokenizer
4.2、ChineseTokenizer
4.3、KeywordTokenizer
4.4、CJKTokenizer
4.5、SentenceTokenizer
5、TokenFilter也是一种TokenStream
5.1、ChineseFilter
5.2、LengthFilter
5.3、LowerCaseFilter
5.4、NumericPayloadTokenFilter
5.5、PorterStemFilter
5.6、ReverseStringFilter
5.7、SnowballFilter
5.8、TeeSinkTokenFilter
6、不同的Analyzer就是组合不同的Tokenizer和TokenFilter得到最后的TokenStream
6.1、ChineseAnalyzer
6.2、CJKAnalyzer
6.3、PorterStemAnalyzer
6.4、SmartChineseAnalyzer
6.5、SnowballAnalyzer
7、Lucene的标准分词器
7.1、StandardTokenizerImpl.jflex
7.2、StandardTokenizer
7.3、StandardFilter
7.4、StandardAnalyzer
8、不同的域使用不同的分词器
8.1、PerFieldAnalyzerWrapper
第三篇:问题篇
问题一:为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”?
问题二:stemming和lemmatization的关系
问题三:影响Lucene对文档打分的四种方式
在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中。
在搜索语句中,设置Query Boost.
继承并实现自己的Similarity
继承并实现自己的collector
问题四:Lucene中的TooManyClause异常
问题五:Lucene的事务性
问题六:用Lucene构建实时的索引
1、初始化阶段
2、合并索引阶段
3、重新打开硬盘索引的IndexReader
4、替代IndexReader
5、多个索引
这个转载至:http://www.cnblogs.com/forfuture1978/archive/2010/06/13/1757479.html
第二个关于HubbleDotNet全文检索分词的技术:
目录如下:
HubbleDotNet 简介
HubbleDotNet 和 Lucene.net 性能对比测试
HubbleDotNet 和 Lucene.Net 匹配相关度的比较
HubbleDotNet 软件架构
安装和升级
安装
升级
用户权限--功能规划中
默认帐号**
添加帐号**
帐号权限**
索引
Hubble.net 的数据库和数据表
Hubble.net 数据表的数据类型
创建、删除数据库
创建数据表
为数据库现有表或视图建立全文索引(一) Append Only 模式
为数据库现有表或视图建立全文索引(二) Updatable 模式
为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式
通过程序和现有表或视图同步
自动和现有表同步
通过后台任务自动同步或优化索引
自动与Oracle中的数据同步解析
内存索引
倒排索引结构*
倒排索引优化*
UnTokenized 索引*
关系数据库索引*
搜索
搜索的基本流程*
HubbleDotNet开源全文搜索数据库项目--查询方法汇总
对 Tokenized 字段搜索*
搜索语法*
指定单词权重
指定字段权重
指定文档权重
Match 方式
Contains 方式
Like 方式*
组合搜索*
Tokenized字段和Untokenized 字段组合搜索*
Tokenized字段和关系数据库索引字段组合搜索*
多表联合搜索*
同构表的联合搜索*
异构表的联合搜索*
编写自己的得分算法*
分词器
SimpleAnalyzer*
EnglishAnalyzer*
PanGuSegment*
查看指定分词器的分词结果*
查看某个字段对应分词器的分词结果*
编写自己的分词器
数据库适配器*
SQLSERVER 2005
SQLSERVER 2000
连接 Oracle 数据库
编写自己的数据库适配器*
性能优化
大量并发访问的解决方案
各种数据类型占用内存情况*
优化分词器*
查询级别缓存*
查询级别缓存的持久化*
数据级别缓存*
不同搜索方式的性能*
分布式查询*
执行跟踪报告*
如何让查询分析器输出执行跟踪报告*
如何分析执行跟踪报告*
分布式查询
HubbleDotNet 分布式检索算法介绍 (一)
HubbleDotNet 分布式检索--异步通讯模式的调用方法
测试报告
HubbleDotNet 海量数据测试报告
远程访问*
SQLClient*
大量并发访问的解决方案
异步通讯模式的调用方法
示例*
项目应用*
注:
* 为还没有完成的文档
** 为功能目前尚未实现
原文链接如下:http://www.cnblogs.com/eaglet/archive/2010/04/07/1706305.html
这个没有文档下载,我过段时间整理下 发个word什么的给大家下载,好坐公交的时候看,呵呵。