`
bevis.cn
  • 浏览: 154639 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Lucene field类 1.版本和2.版本比较

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

(说法一)最近用Lucene开发全文检索。《Lucene in Action》这本书用的是Lucene 1.4。我自己下的是最新的2.1。然后就发现了很多不同的地方。

Field没了Keyword、UnIndexed、UnStored、Text这几个静态成员,只能用
Field(String, String, Store, Index)。
Keyword对应Field.Store.YES, Field.Index.UN_TOKENIZED,
UnIndexed 对应Field.Store.YES, Field.Index.NO,
UnStored对应Field.Store.NO, Field.Index.TOKENIZED,
Text对应Field.Store.YES, Field.Index.TOKENIZED。

FSDirectory.getDirectory的有两个参数的变成了depresed 了。现在要用只有一个参数的。

BooleanQuery的add方法也变了。原来是用两个boolean值组合的,现在 使用BooleanClause.Occur的几个静态成员了。

暂时就发现这点差异。[引自:http://syre.blogbus.com/logs/4736803.html]

(说法二)Field类一共有5种构造函数:

Field(String name, byte[] value, Field.Store store)
Create a stored field with binary value.
Field(String name, Reader reader)
Create a tokenized and indexed field that is not stored.
Field(String name, Reader reader, Field.TermVector termVector)
Create a tokenized and indexed field that is not stored, optionally with storing term vectors.
Field(String name, String value, Field.Store store, Field.Index index)
Create a field by specifying its name, value and how it will be saved in the index.
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)
Create a field by specifying its name, value and how it will be saved in the index.

其中:

Field.Store 表示“是否存储”,即该Field内的信息是否要被原封不动的保存在索引中。

Field.Index 表示“是否索引”,即在这个Field中的数据是否在将来检索时需要被用户检索到,一个“不索引”的Field通常仅是提供辅助信息储存的功能。

Field.TermVector 表示“是否切词”,即在这个Field中的数据是否需要被切词。

通常,参数用Reader,表示在文本流数据源中获取数据,数据量一般会比较大。像链接地址URL、文件系统路径信息、时间日期、人名、居民身份证、电话号码等等通常将被索引并且完整的存储在索引中,但一般不需要切分词,通常用上面的第四个构造函数,第三四个参数分别为Field.Store.YES, Field.Index.YES。而长文本通常可用第3个构造函数。引用[http://blog.csdn.net/colasnail/archive/2007/03/21/1536417.aspx]

(说法三)

1. 2.0以前的版本

UnIndexed: Field的值将被保存到索引文件,不为Field的值建立索引,因此不能通过该Field搜索文档。 UnStored: Field的值不被保存到索引文件,将Field的值分词后建立索引

Text: Field的值分词后建立索引。如果参数为String值将被保存,为Reader值不被保存
2. 2.0版本
用几个内部类的组合来区分Field的具体类型。
Store
COMPRESS:压缩保存。用于长文本或二进制数据
YES:保存
NO:不保存
Index
NO:不建索引
TOKENIZED:分词,建索引
UN_TOKENIZED:不分词,建索引
NO_NORMS:不分词,建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间
TermVector
NO:不保存term vectors
YES:保存term vectors。
WITH_POSITIONS:保存term vectors。(保存值和token位置信息)
WITH_OFFSETS:保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)

(说法四)

关于 Field <?xml:namespace prefix = st1 /><chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span style="FONT-SIZE: 10pt">2.0.0</span> </chsdate>版本和 1.4.3 版本方法相比改动比较大,具体见下表

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span style="FONT-SIZE: 10pt">1.4.3</span> </chsdate>版本中的下面方法都被 Field(String name, String value, Store store, Index index, TermVector termVector) 取代

Keyword(String name, String value) // only version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.3</chsdate>
存储、索引、不分词,用于 URI (比如 MSN 聊天记录的日期域、比如 MP3 文件的文件全路径等等)
Field(String name, String value, Field.Store.YES, Field.Index.UN_TOKENIZED) // version 2.0.0

UnIndexed(String name, String value) // only version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.3</chsdate>
存储、不索引、不分词,比如文件的全路径
Field(String name, String value,Field.Store.YES, Field.Index.NO)// version 2.0.0

UnStored(String name, String value) // only version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.3</chsdate>
不存储、索引、分词,比如 HTML 的正文、 Word 的内容等等,这部分内容是要被索引的,但是由于具体内容通常很大,没有必要再进行存储,可以到时候根据 URI 再来挖取。所以,这部分只分词、索引,而不存储。
Field(String name, String value,Field.Store.YES, Field.Index.TOKENIZED)// version 2.0.0

Text(String name, String value) // only version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.3</chsdate>
存储、索引、分词,比如文件的各种属性,比如 MP3 文件的歌手、专辑等等。 Field.Store.YES, Field(String name, String value,Field.Index.TOKENIZED)// version 2.0.0

Text(String name, Reader value) // only version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">1.4.3</chsdate>

Field(String name, Reader reader) // version <chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False">2.0.0</chsdate>
不存储、索引、分词。

(说法五)

1. 2.0 以前的版本
Keyword: Field 的值将被保存到索引文件,为Field的值建立索引,建立索引时不需要分词。
UnIndexed: Field 的值将被保存到索引文件,不为Field的值建立索引,因此不能通过该Field搜索文档。
UnStored: Field 的值不被保存到索引文件,将Field的值分词后建立索引
Text: Field 的值分词后建立索引。如果参数为String值将被保存,为Reader值不被保存
2. 2.0 版本

用几个内部类的组合来区分Field的具体类型。

Store
² COMPRESS: 压缩保存。用于长文本或二进制数据

² YES :保存

² NO :不保存

Index
² NO :不 建索引

² TOKENIZED :分词, 建索引

² UN_TOKENIZED :不分词, 建索引

² NO_NORMS :不分词, 建索引。但是Field的值不像通常那样被保存,而是只取一个byte,这样节约存储空间

TermVector
² NO : 不保存term vectors

² YES : 保存term vectors。

² WITH_POSITIONS : 保存term vectors。(保存值和token位置信息)

² WITH_OFFSETS : 保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)

(说法六)

* Field.Index有四个属性,分别是:
Field.Index.TOKENIZED:分词索引
Field.Index.UN_TOKENIZED:分词进行索引,如作者名,日期等,Rod Johnson本身为一单词,不再需要分词。
Field.Index:不进行索引,存放不能被搜索的内容如文档的一些附加属性如文档类型, URL等。
Field.Index.NO_NORMS:;
Field.Store也有三个属性,分别是:
Field.Store.YES:索引文件本来只存储索引数据, 此设计将原文内容直接也存储在索引文件中,如文档的标题。
Field.Store.NO:原文不存储在索引文件中,搜索结果命中后,再根据其他附加属性如文件的Path,数据库的主键等,重新连接打开原文,适合原文内容较大的情况。
Field.Store.COMPRESS 压缩存储;
termVector是Lucene 1.4.3新增的它提供一种向量机制来进行模糊查询,很少用。

tags:lucene lucene.net dotlucene field类 Field.store Field.UnStored Field.Keyword Field.Text Field.Index Field.TermVector

转自:http://hi.baidu.com/gw_noah/blog/item/0646fbc4c3418daa8226ac0c.html

分享到:
评论

相关推荐

    lucene lsql

    SELECT field1,field2 WHERE +field1:value This command will display two fields in a grid on the command screen. UPDATE field1=newvalue WHERE +field2:value This command will change the value of ...

    第一个lucene的简单实例....

    1. **索引创建**:通常会有一个类用于读取数据(如文本文件或数据库记录),然后使用Lucene的`IndexWriter`来创建索引。索引是Lucene的核心,它将原始数据转换为便于搜索的结构。 2. **文档模型**:在Lucene中,每...

    Apache Lucene全文检索和IKAnalyzer分词工具类

    * Apache Lucene全文检索和IKAnalyzer分词工具类 * &lt;p&gt;Company: 91注册码 * time:2014-04-22 * @author www.91zcm.com * @date * @version 1.1 */ public class LuceneUtil { /**索引创建的路径**/ ...

    Lucene学习源码.rar

    2. `org.apache.lucene.document.Document` 和 `org.apache.lucene.document.Field`:构建索引的基本元素。 3. `org.apache.lucene.analysis.Analyzer`:查看分词器的实现,了解分词逻辑。 4. `org.apache.lucene....

    Lucene学习工具包.zip

    2. **API熟悉**: 通过阅读官方文档和示例代码,熟悉Lucene的API,包括Analyzer、Document、Field、IndexWriter、Query等类。 3. **实战项目**: 创建一个简单的搜索引擎,实践索引构建和查询过程。可以尝试从文件...

    Lucene留言项目源码.rar

    在“message5_1”、“message4_1”、“message3_4”和“message4_2”这些子文件中,我们可以看到不同版本或阶段的留言数据。通过对这些文件的分析,我们可以了解到项目如何组织和存储留言,以及如何利用Lucene进行...

    lucene-core-2.9.2.jar

    1. 模型与数据结构:Lucene的核心库主要包含以下组件:索引(Index)、文档(Document)、字段(Field)和分词器(Tokenizer)。索引是Lucene处理数据的主要方式,它将文本数据转化为便于搜索的结构。文档是信息的...

    lucene.net 2.9.1.002

    在2.9.1.002这个版本中,Lucene.NET不仅保持了对Java版Lucene的兼容性,还针对.NET平台进行了优化,以满足C#开发者的需求。 一、Lucene.NET基本概念与架构 1. 分析器(Analyzer):Lucene.NET的核心组件之一,负责...

    lucene-core-3.0.2.jar,lucene-demos-3.0.2.jar

    其中,Document类是表示单个文档的基础单元,Field类则用于定义文档中的字段,如标题、内容等。Analyzer是处理文本的关键,它负责将文本分词,去除停用词等预处理工作。IndexWriter用于构建和更新索引,而Searcher则...

    lucene3.0-api.CHM

    1. 文档(Document):在Lucene中,文档是信息的基本单位,它由一系列字段(Field)组成,每个字段包含文本和相应的元数据。 2. 字段(Field):字段是文档中的一个数据单元,可以是文本、日期或其他类型的数据。每...

    lucene,lucene教程,lucene讲解

    2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。 3.MUST_NOT和MUST_NOT:无意义,检索无结果。 4.SHOULD与MUST、SHOULD与MUST_NOT: SHOULD与MUST连用时,无意义,结果为MUST子句...

    lucene-3.5.0.jar

    标题中的"lucene-3.5.0.jar"是Lucene的一个特定版本——3.5.0的Java档案文件(JAR),这个版本的发布标志着Lucene在全文搜索领域的又一里程碑。本文将深入探讨Lucene 3.5.0的核心特性和使用技巧。 首先,Lucene是一...

    lucene-codecs-4.4.0.zip

    这里我们关注的是Lucene的4.4.0版本,通过解压"lucene-codecs-4.4.0.zip",我们可以深入了解其内部机制和实现原理。同时,"java-core.zip"和"java-core-master"提示我们这次探讨还将涉及Java的核心库。 首先,让...

    lucene基本包

    这个“lucene基本包”是探索和学习Lucene的第一步,其中可能包含了Lucene的JAR文件和其他必要的资源,供开发者在实际项目中导入和使用。通过深入理解并实践这些核心概念和功能,开发者可以充分利用Lucene的强大能力...

    lucene-3.0.0-src.zip

    在这个版本3.0.0的源码中,我们可以深入理解Lucene的核心机制和设计原理,这对于开发、优化以及定制自己的搜索引擎系统具有极大的价值。 一、Lucene基本架构 1. 文档索引:Lucene的核心工作是将非结构化的文本数据...

    Lucene.Net-2.0.doc.zip

    这个类MSDN操作文档包含了对 Lucene.Net 2.0 的详细说明,帮助开发者理解和使用其丰富的特性和功能。 ### Lucene.Net 架构 Lucene.Net 采用分层设计,主要由以下几个部分组成: 1. **索引(Indexing)**: 这是 ...

    lucene索引结构原理.docx

    1. **Lucene 与数据库的比较** - **索引数据源**:在数据库中,数据以记录(Record)形式存储,每个记录包含多个字段(Field)。当执行SQL查询时,数据库会返回匹配的记录集合。而在Lucene中,基本单位是Document,...

    Lucene操作数据库借鉴.pdf

    - 将数据库记录的字段映射到`Document`的`Field`对象中,如`Field.Store.YES`表示存储该字段,`Field.Index.UN_TOKENIZED`表示该字段不进行分词处理。 - 将每个`Document`添加到`IndexWriter`中,以创建索引。 2....

Global site tag (gtag.js) - Google Analytics