1.用途。

索引数字的场景主要有两种:一是把它们当作字符串一样处理,比如“要是搁以前,术士能暴击10000多,有木有!”中的"10000",它和其它的词没什么区别,你可以把它仅仅想成一个字符串;另一种场景则是某个域只索引数字,且可以搜索数字的范围等,比如设计了某个Field存储邮件的大小,现在要搜索大小在3M-10M的邮件。

对于第一种情况,你要做的仅仅是选一个不会对数字进行分词的分析器。这种分析器很多,比如之前我们用过的WhitespaceAnalyzer和StandardAnalyzer。当然WhitespaceAnalyzer分析器可能仅仅对英语之类的语言还有点用处。对于第二种情况,你不需要为这些专门设计用来存储数字的域进行分词,指定成Field.Index.NOT_ANALYZED就可以了。不过你必须清楚的是,Lucene内部处理的仍然只是String类型!即"10"是排在"2"前面的!若是想支持范围搜索,你需要为数字增加前置0, 即需要索引"02",这样"02"便排在"10"前面了!

doc.add(new NumericField("attachs",Field.Store.YES,true).setIntValue(attachs[i]));
doc.add(new NumericField("date",Field.Store.YES,true).setLongValue(dates[i].getTime()));

2.  索引数字的场景主要有两种:一是把它们当作字符串一样处理,比如“要是搁以前,术士能暴击10000多,有木有!”中的"10000",它和其它的词没什么区别,你可以把它仅仅想成一个字符串;另一种场景则是某个域只索引数字,且可以搜索数字的范围等,比如设计了某个Field存储邮件的大小,现在要搜索大小在3M-10M的邮件。

对于第一种情况,你要做的仅仅是选一个不会对数字进行分词的分析器。这种分析器很多,比如之前我们用过的WhitespaceAnalyzer和StandardAnalyzer。当然WhitespaceAnalyzer分析器可能仅仅对英语之类的语言还有点用处。对于第二种情况,你不需要为这些专门设计用来存储数字的域进行分词,指定成Field.Index.NOT_ANALYZED就可以了。不过你必须清楚的是,Lucene内部处理的仍然只是String类型!即"10"是排在"2"前面的!若是想支持范围搜索,你需要为数字增加前置0, 即需要索引"02",这样"02"便排在"10"前面了!

3。日期类型的使用场景可谓多之又多:邮件的寄出、收到日期;文件的创建日期、最后修改日期;HTTP响应中的最后修改日期等等。总之,绝大多数情况下,你会有处理日期的遭遇!Don't worry! Lucene为我们装备了一个处理日期的利器:DateTools. 通过它,我们可以便捷的把Date型转换成String型

//转自:BuN_Ny
//http://bun-ny.iteye.com/blog/1075632
Document doc = new Document();
doc.add(new Field("indexDate",
DateTools.dateToString(new Date(), DateTools.Resolution.DAY),
Field.Store.YES,
Field.Index.NOT_ANALYZED));

DateTools 可以把日期和时间转换成 YYYYMMDDhhmmss 的格式,并根据指定的resolution去除相应后缀。比如你指定了Resolution.DAY,2012年12月21日就会被转换成20121221,时分秒部分会被去除掉。这么一来,就很容易发现,即便是按字符串进行排序、比较,也能得到和日期相同的效果。字符串"20121221"是大于"20121121"的,而其对应的日期也是如此。采用这种方式处理日期是不是很简单?参数resolution允许你截取对你的应用有意义的日期部分,精确度从Resolution.MILLISECOND(毫秒)到Resolution.YEAR(年),但是值得注意的是,更高的精度就需要付出更大的代价!

提醒你一下,如果你的应用中需要搜索一个YYYYMMDD范围内的数据,而在展示的时候又希望把时间部分(hhhmmss)也带上,你可以尝试创建两个域,一个索引到Resolution.DAY范围,另一个仅仅设置Store.

lucene索引日期和数字的更多相关文章

  1. Lucene 索引功能

    Lucene 数据建模 基本概念 文档(doc): 文档是 Lucene 索引和搜索的原子单元,文档是一个包含多个域的容器. 域(field): 域包含“真正的”被搜索的内容,每一个域都有一个标识名称 ...

  2. 深入Lucene索引机制

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  3. Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)

    一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lu ...

  4. Lucene索引文件组成

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  5. MySQL和Lucene索引对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过 ...

  6. Lucene索引文件学习

     最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...

  7. lucene索引

    一.lucene索引 1.文档层次结构 索引(Index):一个索引放在一个文件夹中: 段(Segment):一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能产生新段,不同的段可以合并成一 ...

  8. lucene 索引合并策略

    在索引算法确定的情况下,最为影响Lucene索引速度有三个参数--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB .这些参数无非是控制 ...

  9. Lucene学习笔记: 四,Lucene索引过程分析

    对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...

随机推荐

  1. python 将pdf分页后插入至word中

    所用技术 1. python编程基础 2. 使用pyPdf 3. 使用python操作word 4. 正则表达式的使用 5. windows的bat编程 下面是一个pyPdf库使用的示例: from ...

  2. python——生成器

    python——生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个 ...

  3. Linux 中文乱码问题

    弄了好久还是乱码 最终方法:进入 vim /etc/vimrc中 原先只有一个 set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936改成: let ...

  4. Android之网络编程

    本文主要包括三方面内容 Httpurlconnection中doGet与doPost方法实现提交数据到服务器 HttpClient中doGet与doPost方法实现提交数据到服务器 android-a ...

  5. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  6. ajax 中文乱码问题 主要是IE浏览器

    解决方案: 提交前采用encodeURI两次编码,注:一定是两次 举例: var taText = $("#txtName").val(); taText = encodeURI( ...

  7. Js 正则表达式特殊字符含义

    字符   匹配 \o     null \t      制表符 \n     换行符 \v     垂直制表符 \f     换页符 \r     回车符 \xnn   由十六进制nn指定的拉丁字符 ...

  8. soft lockup和hard lockup介绍

    转自:http://www.cnblogs.com/openix/p/4034530.html 转自:http://blog.csdn.net/panzhenjie/article/details/1 ...

  9. Linux电源管理(11)_Runtime PM之功能描述

    转自:http://www.wowotech.net/pm_subsystem/rpm_overview.html 1. 前言 终于可以写Runtime PM(后面简称RPM)了,说实话,蜗蜗有点小激 ...

  10. hdu 1733 分层网络流 ****

    题目大意:有一个类似于迷宫搜索的图,‘.’代表的是无人的路,'X'代表有人的点,'#'代表此点不可通过,'@'代表门口.每个位置每一秒钟只能站一个人,每个位置到上下左右点的时间为1,问你所有人能不能出 ...