`

Lucene日期索引搜索

阅读更多

注意使用lucene的版本,调试本例的时候,作者使用的是lucene 2.4.1

package com.zhx.test;   
  
import java.io.IOException;   
import java.text.SimpleDateFormat;   
import java.util.Date;   
  
import org.apache.lucene.analysis.Analyzer;   
import org.apache.lucene.analysis.SimpleAnalyzer;   
import org.apache.lucene.document.DateTools;   
import org.apache.lucene.document.Document;   
import org.apache.lucene.document.Field;   
import org.apache.lucene.index.CorruptIndexException;   
import org.apache.lucene.index.IndexReader;   
import org.apache.lucene.index.IndexWriter;   
import org.apache.lucene.index.Term;   
import org.apache.lucene.search.IndexSearcher;   
import org.apache.lucene.search.RangeQuery;   
import org.apache.lucene.search.ScoreDoc;   
import org.apache.lucene.search.Searcher;   
import org.apache.lucene.search.TopDocs;   
import org.apache.lucene.store.LockObtainFailedException;   
  
public class IndexDate {   
  
    /**  
     * @param args  
     */  
    public static void main(String[] args) {   
        //索引所在的文件夹   
        String IDNEX_PATH = "Z:/data/paoding/test_index";     
        //索引字段名   
        String FILED_NAME = "fieldDate";   
        //索引字段名    
        String FILED_CONTENT = "field_content";   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
        //获取Paoding中文分词器      
        Analyzer analyzer = new SimpleAnalyzer();      
        //建立索引      
        IndexWriter writer;      
        try {      
            //IndexWriter.MaxFieldLength(1)表示只索引到第几个项   
            writer = new IndexWriter(IDNEX_PATH, analyzer, true,new IndexWriter.MaxFieldLength(1));      
            //索引日期字段的值   
            Date fieldDate = sdf.parse("2009-08-22");   
            Document doc1 = new Document();    
            //用DateTools工具转换成String类型   
            String fieldDateStr = DateTools.dateToString(fieldDate,    
                    DateTools.Resolution.MINUTE);   
            //创建field,不存储,不分词但索引   
            Field field = new Field(FILED_NAME, fieldDateStr, Field.Store.NO,      
                Field.Index.NOT_ANALYZED, Field.TermVector.NO);      
            //创建field,存储,分词并索引   
            Field fieldContent = new Field(FILED_CONTENT, "记录1", Field.Store.YES,      
                    Field.Index.ANALYZED, Field.TermVector.YES);    
            //添加进doc   
            doc1.add(field);   
            doc1.add(fieldContent);   
            writer.addDocument(doc1);    
               
            Document doc2  = new Document();    
            fieldDate = sdf.parse("2009-08-20");   
            fieldDateStr = DateTools.dateToString(fieldDate,    
                    DateTools.Resolution.MINUTE);   
            field = new Field(FILED_NAME, fieldDateStr, Field.Store.NO,      
                Field.Index.NOT_ANALYZED, Field.TermVector.NO);    
            fieldContent = new Field(FILED_CONTENT, "记录2", Field.Store.YES,      
                    Field.Index.ANALYZED, Field.TermVector.YES);     
            doc2.add(field);      
            doc2.add(fieldContent);   
            writer.addDocument(doc2);      
            writer.close();      
            System.out.println("Indexed success!");      
                   
            //检索      
            IndexReader reader = IndexReader.open(IDNEX_PATH);    
            Date startDate = sdf.parse("2009-07-21");   
            Date endDate = sdf.parse("2009-09-21");   
            String startDateStr = DateTools.dateToString(startDate,    
                    DateTools.Resolution.MINUTE);   
            String endDateStr = DateTools.dateToString(endDate,    
                    DateTools.Resolution.MINUTE);   
            Term start = new Term(FILED_NAME,startDateStr);   
            Term end = new Term(FILED_NAME,endDateStr);   
            RangeQuery rangeQuery = new RangeQuery(start,end,true);     
            Searcher searcher = new IndexSearcher(reader);      
            //列表大小   
            int count = 10;   
            TopDocs topDocs = searcher.search(rangeQuery,count);      
            if (topDocs.totalHits == 0) {      
                System.out.println("hits.length=0");      
            }else{   
                //获取记录数组   
                ScoreDoc[] hits = topDocs.scoreDocs;   
                for(int i=0;i<hits.length;i++){   
                    //获取某条记录的Id   
                    int docId = hits[i].doc;   
                    Document doc = searcher.doc(docId);   
                    System.out.println("第"+i+"结果:"+doc.get(FILED_CONTENT));   
                }   
            }    
            reader.close();      
        } catch (CorruptIndexException e) {      
            // TODO Auto-generated catch block      
            e.printStackTrace();      
        } catch (LockObtainFailedException e) {      
            // TODO Auto-generated catch block      
            e.printStackTrace();      
        } catch (IOException e) {      
            // TODO Auto-generated catch block      
            e.printStackTrace();      
  
        } catch (java.text.ParseException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
     
     
  
    }   
  
}  

 

分享到:
评论

相关推荐

    Lucene实战视频教程

    资源名称:Lucene实战视频教程资源目录:【】01_lucenc简介和创建索引初步【】02_lucene简介和搜索初步【】03_lucene索引_创建_域选项【】04_lucene索引_的删除和更新【】05_lucene索引_加权操作和Luke的简单演示...

    jsp+servlet+jdbc+lucene 搜索引擎

    搜索引擎jsp+servlet+jdbc+lucene框架,包括初始化索引,实时索引,关键字索引,数字及日期索引等功能,下载后即可使用,包目录结构清晰,易懂易学

    Lucene 3.6 学习笔记

    第一章 LUCENE基础 2 1.1 索引部分的核心类 2 1.2 分词部分的核心类 2 1.3 搜索部分的核心类 2 第二章 索引建立 3 2.1 创建Directory 3 2.2 创建Writer 3 2.3 创建文档并且添加索引 4 2.4 查询索引的基本信息 5 2.5 ...

    Lucene IndexApplication:使用lucene索引文本文档-开源

    自动和安排 Lucene 搜索索引的构建。 用于记录系统消息的通用日志框架。 您可以为严重和非严重错误和消息配置设置。 排名搜索——最好的结果首先返回许多强大的查询类型:短语查询、通配符查询、邻近查询、范围查询...

    Lucene in Action(简体中文版+英文原版)

    在Internet早期我就对搜索和索引感兴趣。我已经建立了用majordomo、MUSH(Mail User’s Shell)和少量Perl、awk及shell脚本来管理邮件列表的存储结构。我实现了一个CGI的web接口,允许用户搜索这个列表和其它用户的...

    Elasticsearch 技术解析与实战.zip

    前言 第1章 Elasticsearch入门 1 1.1 Elasticsearch是什么 1 1.1.1 Elasticsearch的历史 2 1.1.2 相关产品 3 1.2 全文搜索 3 1.2.1 Lucene介绍 4 1.2.2 Lucene倒排索引 4 1.3 基础知识 6 1.3.1 Elasticsearch术语及...

    kbvault:KBVault是一个免费,简单但有效且易于使用的知识库应用程序

    开发人员版| ....) 易于使用HTML编辑器(CKEditor) 预定的发布(指定文章的发布日期和到期日期) 将文章另存为草稿跟踪文章的观看次数和喜欢通过ShareThis分享文章通过Lucene库搜索并重建索引在搜索过程中通过自动...

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  [TablePanel.java] 日历表格面板  ...

    JAVA上百实例源码以及开源项目

    内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  [TablePanel.java] 日历表格面板  ...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包11

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包2

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包6

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包5

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包8

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包7

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

Global site tag (gtag.js) - Google Analytics