`
bevis.cn
  • 浏览: 149929 次
  • 性别: 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 ...

    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,lucene教程,lucene讲解

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

    Lucene查询工具LQT.zip

    Lucene Query Tool (lqt) 是一个命令行工具用来执行 Lucene 查询并对结果进行格式化输出。 使用方法: $ ./lqt usage: LuceneQueryTool [options] --analyzer &lt;arg&gt; for query, (KeywordAnalyzer | ...

    lucene基本包

    Lucene一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎

    lucene2.9.1完整DEMO及开发文档

    doc.add(new Field("path", src.getCanonicalPath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new FileReader(src)...

    Lucene中文分词组件 JE-Analysis 1.4.0

    分词效率: 第一次分词需要1-2秒(读取词典),之后速度基本与Lucene自带分词持平 运行环境: Lucene 1.9+ 内存消耗: 30M+ 1.4.0 —— 2006-08-21 增加词典的动态扩展能力 1.3.3 —— 2006-07...

    lucene2.9.1所有最新开发包及源码及文档

    a) 构造方法: Field(String name, String value, Field.Store.YES, Field.Index.ANALYZED) name: 域的名称, 只能是字符串. value: 域的值, 只能是字符串. Field.Store: 指定Field的值是否存储或怎样存储. NO(不...

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    1&gt; lucene学习笔记 2&gt; 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2...

    一步一步跟我学习Lucene源码之lucene的各种Field

    此博文是对近期做lucene索引的总结, (lucene,solr,netty,hadoop),如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家关注呦

    java Lucene初级教程

    2 lucene的工作方式  lucene提供的服务实际包含两部分:一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词...

    IKAnalyzer2012FF_u1.jar

    2.把IKAnalyzer.cfg.xml 和 stopword.dic添加到classes目录 3.把IKAnalyzer2012FF_u1.jar添加到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib目录 4.修改 /opt/cdhsolr/fuser/conf/schema.xml...

    Lucene创建索引步骤

    Lucene创建索引步骤: 1、创建Directory(索引位置) 2、创建IndexWrite(写入索引) 3、创建Document对象 4、为Document添加Field(相当于添加属性:类似于表与字段的关系) 5、通过IndexWriter添加文档到索引中

    ZendFramework中文文档

    1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...

    Lucene笔记.doc

    Lucene笔记中包含了 什么是lucene 应用领域 创建索引 使用luke查看索引 搜索索引 Field域的详细介绍 各种类型的搜索 使用中文分词器

    lucene:Node.js库进行转换

    解析,修改和字符串化Lucene查询。 | | 安装 npm install --save lucene -or- yarn add lucene 用法 const lucene = require ( 'lucene' ) ; const ast = lucene . parse ( 'name:frank OR job:engineer' ) ; ...

    最新Lucene教程

    2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系型数据库的表结构。 3)document包相对而言比较简单,该包下面有3个类,document相对于关系型数据库的记录对象,Field主要负责字段的管理。 4)...

    Lucene In Action

    In chapter 1, you meet Lucene. We introduce some basic informationretrieval terminology, and we note Lucene’s primary competition. Without wasting any time, we immediately build simple indexing and ...

    IKAnalyzer分词器 下载IKAnalyzer2012FF_u1.jar

    2.把IKAnalyzer.cfg.xml 和 stopword.dic添加到classes目录 3.把IKAnalyzer2012FF_u1.jar添加到/opt/cloudera/parcels/CDH/lib/solr/webapps/solr/WEB-INF/lib目录 4.修改 /opt/cdhsolr/fuser/conf/schema.xml...

Global site tag (gtag.js) - Google Analytics