`
BuN_Ny
  • 浏览: 85491 次
  • 来自: 济南
社区版块
存档分类
最新评论

13) 第二章 索引:用Lucene索引日期和时间

阅读更多

 

    对Lucene而言,每个域都是String类型。然而在真实的应用中,我们还会遇到诸如日期、整数、浮点数等其它类型。如何是好?Lucene自然有其处理之道。

    先让我们来看看Lucene是怎么处理日期类型的吧!

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

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.

 

    最后,我给出一个完整的例子:

import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import junit.framework.TestCase;

import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class IndexDateTest extends TestCase{
	
	private Directory directory;
	
	protected void setUp() throws Exception {
		Calendar cal = Calendar.getInstance();
		cal.set(2011, 5, 10);
		Date date = new Date(cal.getTimeInMillis());
		
		directory = new RAMDirectory();
		IndexWriter writer = getWriter(); 

		Document doc = new Document();
        doc.add(new Field("indexDate",
                DateTools.dateToString(date, DateTools.Resolution.DAY),
                Field.Store.YES,
                Field.Index.NOT_ANALYZED));

        writer.addDocument(doc);
        writer.close();
	}

	public void testDateIndex() throws IOException {
		IndexSearcher is = new IndexSearcher(directory);
		Query query = new TermQuery(new Term("indexDate", "20110610")); 

		TopDocs topDocs = is.search(query, 1);
        ScoreDoc[] docs = topDocs.scoreDocs;

        Document doc = is.doc(docs[0].doc);
        assertEquals("20110610", doc.get("indexDate"));
	}

	private IndexWriter getWriter() throws IOException {
		return new IndexWriter(directory, new WhitespaceAnalyzer(),
				IndexWriter.MaxFieldLength.UNLIMITED);
	}

}
 

 

3
0
分享到:
评论

相关推荐

    Lucene In Action中文版第二章

    《Lucene In Action中文版第二章》主要涵盖了Lucene搜索引擎库的基础知识和核心概念,这是一款广泛应用于全文检索、信息检索领域的开源Java库。Lucene的强大之处在于其高效性和灵活性,它能帮助开发者迅速构建出具备...

    基于lucene的索引与搜索

    第二章 搜索引擎的结构 2.1 系统概述 搜索引擎主要由三部分组成:网络爬虫(也称为网络机器人)、索引器和查询处理器。首先,网络爬虫负责从互联网上抓取网页;然后,索引器对抓取的网页进行处理,创建索引;最后...

    Lucene实战第二版

    第二章“Lucene应用”则会进一步深入实践,可能涵盖: 1. **全文检索**:演示如何实现高效的全文检索功能,包括关键词高亮和模糊匹配。 2. **多字段搜索**:讲解如何同时在多个字段上进行搜索,并进行复合条件的...

    lucene索引结构与时空优化

    第一章 Lucene是个倒排索引 第二章 Lucene与数据库 第三章 Lucene的索引建立及文件结构 第四章 Lucene的检索机制及文档得分 第五章 Lucene的存储优化 第六章 Lucene的效率优化 第七章 用Lucene加快web开发!

    Lucene In Action-book

    #### 第二部分:应用Lucene - **章节内容**: - **Parsing common document formats (解析常见文档格式)**:介绍了解析PDF、Word等常见文档格式的方法,使这些文档可被搜索。 - **Tools and extensions (工具和...

    Lucene 3.6 学习笔记

    ### 第二章 索引建立 #### 2.1 创建 Directory 和 Writer - `Directory`用于指定索引的存储位置,如磁盘或内存。 - `IndexWriter`创建时需传入`Directory`,用于写入索引。 #### 2.2 创建文档 - `Document`对象...

    lucene in aciton (英文版)

    2. **第二部分:应用Lucene** - **第7章:解析常见文档格式** - 讨论了如何使用Lucene处理常见的文档格式,如PDF、Word等。 - 包括了工具和技术的介绍。 - **第8章:工具和扩展** - 介绍了可用于增强Lucene功能...

    Lucene In Action second edition

    《Lucene in Action》第二版不仅全面覆盖了 Lucene 的基础理论和技术细节,还包含了大量的实践经验和成功案例。无论是初学者还是有一定经验的开发者,都能从中获得有价值的信息和启示。如果你正在寻找一本既能深入浅...

    Lucene_in_Action_中文版前5章

    2. **第二章:构建第一个应用** - **环境搭建**:介绍如何配置Java环境,以及如何获取和导入Lucene的库。 - **创建索引**:讲解了如何使用Lucene API对文本数据进行分析、分词和建立索引。 - **基本搜索**:展示...

    搜索引擎Lucene+Heritrix(第二版)

    《搜索引擎Lucene+Heritrix(第二版)》是一本深度探讨搜索引擎技术的书籍,主要聚焦于开源项目Lucene和Heritrix...而压缩包中的"ch2"可能包含了书中第二章的内容,涉及更具体的细节和技术实现,对于深入学习至关重要。

    搜索引擎Lucene+Heritrix(第二版)2

    《搜索引擎Lucene+Heritrix(第二版)2》是一本深入探讨搜索引擎技术的专业书籍,主要围绕两个核心组件——Lucene和Heritrix展开。Lucene是Apache软件基金会的一个开源全文检索库,而Heritrix则是一个强大的网络爬虫...

    Lucene in Action.pdf

    第二部分为“应用Lucene”,侧重于实际应用场景中的实践技巧。 ##### 第一部分:核心Lucene 1. **Meet Lucene(认识Lucene)** - **章节概述**:本章主要介绍Lucene的基本概念、特点及其在搜索引擎领域的地位。...

    Lucene In Action

    - 第一章介绍了如何构建一个简单的索引和搜索应用程序。通过这个例子,读者可以立即上手实践,并根据自己的需求进行修改和扩展。 - **应用场景与自定义需求适应性**:此示例程序可以作为基础模板,适用于多种不同...

    Lucene2.0+Heritrix(源代码)

    在"ch2"这个文件中,可能包含了关于第二章的源代码或者教程内容,这部分通常会详细解释如何设置和运行这两个项目。可能包括如何配置Heritrix的爬虫策略,如何定制Lucene的索引和搜索功能,以及如何将两者整合。读者...

    搜索引擎Lucene+Heritrix(第二版)3

    《搜索引擎Lucene+Heritrix(第二版)3》是一本深入探讨搜索引擎技术的专业书籍,主要聚焦于两个关键组件:Apache Lucene和Heritrix。Lucene是Java开发的全文检索库,而Heritrix是一款开源的网络爬虫工具。这两者在...

Global site tag (gtag.js) - Google Analytics