lucene索引日期和数字
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索引日期和数字的更多相关文章
- Lucene 索引功能
Lucene 数据建模 基本概念 文档(doc): 文档是 Lucene 索引和搜索的原子单元,文档是一个包含多个域的容器. 域(field): 域包含“真正的”被搜索的内容,每一个域都有一个标识名称 ...
- 深入Lucene索引机制
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)
一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lu ...
- Lucene索引文件组成
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- MySQL和Lucene索引对比分析
MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过 ...
- Lucene索引文件学习
最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和s ...
- lucene索引
一.lucene索引 1.文档层次结构 索引(Index):一个索引放在一个文件夹中: 段(Segment):一个索引中可以有很多段,段与段之间是独立的,添加新的文档可能产生新段,不同的段可以合并成一 ...
- lucene 索引合并策略
在索引算法确定的情况下,最为影响Lucene索引速度有三个参数--IndexWriter中的 MergeFactor, MaxMergeDocs, RAMBufferSizeMB .这些参数无非是控制 ...
- Lucene学习笔记: 四,Lucene索引过程分析
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后 ...
随机推荐
- codeforces 483B Friends and Presents 解题报告
题目链接:http://codeforces.com/problemset/problem/483/B 题目意思:有两个 friends,需要将 cnt1 个不能整除 x 的数分给第一个friend, ...
- python文件取MD5
import hashlib def md5sum(filename, blocksize=65536): hash = hashlib.md5() with open(filename, " ...
- hadoop之快照
在hadoop第前几个版本中是没有快照功能的,2.x中是有这个特性的 Hadoop 2.x HDFS新特性 HDFS快照 HDFS快照 在2.x终于实现了快照 设置一个目录为可快照 ...
- Struts2中配置默认Action
1.当访问的Action不存在时,页面会显示错误信息,可以通过配置默认Action处理用户异常的操作:2.配置方法: 在struts.xml文件中的<package>下添加如下内容: ...
- php 面向对象的方式访问数据库
<body> <?php //面向对象的方式访问数据库 //造对象 $db = new MySQLi("localhost","root",& ...
- C#学习笔记-----基于AppDomain的"插件式"开发
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...
- 面向服务的体系结构(SOA)——(5)关于MEP(Message Exchange Patterns)
SOA中的MEP和JavaEE中的JMS类似,当然了就应该是类似的,因为都是关于消息方面的.一个是对系统架构当中消息的解决思路,一个是针对Java平台中的消息的具体解决办法(严格说不是具体的,只是提供 ...
- 用PHP语言做网站常见漏洞有哪些?
第一:SQL注入漏洞 在进行网站开发的时候,程序员由于对用户输人数据缺乏全面判断或者过滤不严导致服务器执行一些恶意信息,比如用户信息查询等.黑客可以根据恶意程序返回的结果获取相应的信息.这就是所 ...
- poj 1753
翻转棋,注意是翻转周围四个的,不是整行列的 汗-_-! 哥的代码风还是不错的 二进制储存状态 Sample Input bwwb bbwb bwwb bwww Sample Output 4 #in ...
- SQLServer中临时表与表变量的区别分析(转)
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...