DotLucene源码浅读笔记(2) : Lucene.Net.Documents
来源:互联网 发布:游杰网络 编辑:程序博客网 时间:2024/05/13 08:34
DotLucene源码浅读笔记(2) : Lucene.Net.Documents
这个写的比较抱歉,因为已经开始阅读Index部分了,Documents这个部分很早之前写了,但觉得没什么价值没发表,荒芜了一段时间,现在又开始了.这篇仅仅为了系列的完整.也发表了吧,大家随便仍鸡蛋吧 :).
这个命名空间的类相对较少,也相对较简单,一共才四个类,主要的类是Document,Field,
在DotLucene中,可以这样认为,Document就是一种类似于数据库中的数据列的数据结构,Field就相当于字段;Document由多个Field组成,并且DotLucene并不要求每个Document的结构是一样的, 在DotLucene中,送入到索引器中索引的的数据是Document,搜索出来的数据也是Document。所以只要你的数据源能转化成Document这样的数据结构就可以被DotLucene索引。准确点来说,应该是,不管是HTML,Word,PDF格式还是啥格式 ,只要能转换成文本就可以被索引。当然如果你意想天开。把图片序化成字串加入索引也可以。再写个特别的Analyzer,说不定会成为一个特别的图片搜索引擎。J
下面从源代码的角度整理一下Document,Field的作用和机理。
Document : 从源码的角度看,他就是一个ArrayList的包装类。封装了把Field对象加入,取出ArrayList等方法,以及SetBoost(权重)等等方法组成的类。其实这样的设计比较常见,也是很不错的技巧。
Field :这个类相对比较长,从应用的角度看,最主要的是理解几个概念,
那一个构造函数做代表:
public Field(System.String name, System.String string_Renamed, bool store, bool index, bool token, bool storeTermVector)
其中:
store : 是否存储;
index : 是否索引;
token : 是否分词;如果需要索引,token就必须为true,只有分词后才能够被索引。
Field的主要类型,都是这几个参数的变化而已,我抄了两个表格:
偏向代码角度,其实这个表格没太大作用。下面不同的方法,其实就是return new Filed(?),不同的是?里的参数组合不同。
方法
切词
索引
存储
用途
Field.Text(String name, String value)
Yes
Yes
Yes
切分,索引,并存储,比如:title,subject
Field Text(String name, Reader value)
Yes
Yes
Yes
与上面同, Term Vector并不存储此Field
Field Text(String name, String value, boolean storeTermVector)
Yes
Yes
Yes
切分,索引,存储,比如:title,subject.于上面不同的加入了一个控制变量
Field Text(String name, Reader value, boolean storeTermVector)
Yes
Yes
Yes
切分,索引,存储,比如:title,subject.于上面不同的加入了一个控制变量
Field.Keyword(String name, String value)
No
Yes
Yes
不切分,索引,存储,比如:date,url
Field Keyword(String name, Date value)
不切分,存储,索引,用来返回hits
Field.UnIndexed(String name, String value)
No
No
Yes
不切分,不索引,存储,比如:文件路径
Field.UnStored(String name, String value)
Yes
Yes
No
只全文索引,不存储
Field UnStored(String name, String value, boolean storeTermVector)
Yes
Yes
No
于上面相同,不同的是加入了一个控制变量
http://www.dmresearch.net/html/content/lucene-nutch/1000001794.php
偏向应用的:
Keywork
该类型的数据将不被分析,而会被索引并保存保存在索引中.
UnIndexed
该类型的数据不会被分析也不会被索引,但是会保存在索引.
UnStored
和UnIndexed刚好相反,被分析被索引,但是不被保存.
Text
和UnStrored类似.如果值的类型为string还会被保存.如果值的类型为Reader就不会被保存和UnStored一样.
http://www.cnblogs.com/idior/articles/120301.html
最后,取得的Field的值是用StringValue()不是ToString().ToString()输出是描述这个Field的状态信息。不知道这个是不是Java带过来的毛病(习惯?)。
需要特别说明的是DotLucene的数字和日期的处理方式,相关的类NumberTools,DataTools
- DotLucene源码浅读笔记(2) : Lucene.Net.Documents
- DotLucene源码浅读笔记(2) : Lucene.Net.Documents
- DotLucene源码浅读笔记(2) : Lucene.Net.Documents
- DotLucene源码浅读笔记(2) : Lucene.Net.Documents
- DotLucene源码浅读笔记(1) : Lucene.Net.Analysis
- DotLucene源码浅读笔记(1) : Lucene.Net.Analysis
- DotLucene源码浅读笔记(1) : Lucene.Net.Analysis
- DotLucene源码浅读: Lucene.Net.Analysis
- Lucene.net源码浅读笔记(1) : Lucene.Net.Analysis
- DotLucene类库(1) : Lucene.Net.Analysis
- DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
- DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
- DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
- 开源搜索引擎Lucene.Net---学习笔记(2) 使用Lucene.Net源码搜索
- 在DotLucene/Lucene.net中, 增加自己的中文分词Analyzer
- 在DotLucene/Lucene.net中, 增加自己的中文分词Analyzer
- Lucene.NET学习笔记(2)
- Lucene.Net 全文索引笔记
- Building Web Solutions with ASP.NET and ADO.NET
- 百万纪录级mysql数据库以及discuz!优化
- DotLucene源码浅读笔记(1)补遗:编写简单中文分词器ChineseAnalyzer
- Storage Networks
- 在web.xml中配置error-page
- DotLucene源码浅读笔记(2) : Lucene.Net.Documents
- You Can Program in C++: A Programmer's Introduction
- Web Engineering: The Discipline of Systematic Development of Web Applications
- Zend Framework之Layout
- ABAP两个非法修改系统程式的方法...
- Pro ASP.NET 2.0 in C# 2005
- Understanding UMTS Radio Network Modelling, Planning and Automated Optimisation: Theory and Practice
- Mobile Database Systems
- The Game Animator's Guide to Maya