`

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();   
        }   
     
     
  
    }   
  
}  

 

分享到:
评论

相关推荐

    Lucene3.0创建索引

    ### Lucene3.0创建索引 在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、...

    Lucene 索引的简单使用

    - **索引(Index)**:索引是Lucene处理数据的核心,它将文本数据转换为可供快速搜索的结构。 - **分词器(Tokenizer)**:分词器将输入的文本分解为一系列的词语,这是建立索引的第一步。 - **分析器(Analyzer)...

    lucene索引结构原理.docx

    【Lucene 索引结构原理】 Lucene 是一个高性能、全文检索的开源...在Lucene中,这个过程包括分析文本、创建倒排索引等步骤,使得搜索操作从线性时间复杂度转变为对数时间复杂度,显著提高了大规模文本数据的检索速度。

    lucene索引文件格式介绍

    Lucene 是一个流行的开源全文搜索引擎库,其核心功能之一就是构建高效的索引。索引文件格式是Lucene实现快速搜索的关键。以下是对Lucene索引文件格式的详细说明。 首先,我们要理解Lucene索引的基本结构。一个...

    lucene 4.7.2 Demo

    范围搜索是Lucene的另一个亮点,允许用户按数值或日期范围进行过滤。例如,你可以搜索价格在特定区间内的商品,或者查找某个时间段内的新闻。这需要利用RangeQuery或NumericRangeQuery类来构建相应的查询条件。 ...

    Lucene索引文件查看工具lukeall4.7.1

    2. **字段浏览**:LukeAll可以展示索引中的所有字段,包括字段名、字段类型(如文本、数值或日期)、是否可搜索、是否存储等属性。这对于理解和调整索引策略至关重要,因为它揭示了文档数据如何被组织和处理。 3. *...

    lucene全文索引原理

    对于大型数据集,Lucene可以通过Solr或Elasticsearch等工具实现分布式搜索,将索引分散在多台机器上,提高检索效率和容错能力。 了解并掌握Lucene的这些原理,有助于开发者构建高效、灵活的全文搜索应用,满足各种...

    Lucene时间区间搜索

    总之,Lucene在C#中的时间区间搜索是通过构建和执行RangeQuery来实现的,这涉及到索引构建、查询解析、时间值的转换和比较等多个环节。合理地利用这些技术,可以有效地提升数据检索的效率和准确性。在实际应用中,还...

    lucene高级搜索进阶项目_04

    5. **过滤与排序**:除了返回最相关的搜索结果,我们还需要对结果进行过滤(例如,按日期或评分排序),这可以通过Filter和Sort类来实现。 6. ** faceted search(面式搜索)**:在大型信息集合中,提供分类浏览和...

    基于Lucene的桌面搜索软件

    Lucene提供了完整的文本索引及搜索能力,无需任何第三方程序支持。它是一个用Java编写的全文检索引擎,具有强大的文本分析能力,可以实现快速的全文搜索。 #### 桌面搜索软件背景 随着个人电脑上数据量的不断增长...

    lucene 实现类似百度搜索

    **Lucene 搜索引擎实现详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。它提供了一套强大的数据结构和算法,用于高效地存储和检索大量文本数据。通过 Lucene,开发者可以轻松地在自己的应用...

    基于lucene 的简单搜索引擎.rar

    索引是Lucene的核心,它将文档的内容转换为可快速搜索的数据结构。索引过程包括分析、倒排和存储等步骤,使得搜索操作能够高效地进行。 ### 2. 构建搜索引擎步骤 **2.1 初始化** 首先,我们需要导入Lucene的相关库...

    lucene索引

    本文将深入探讨Lucene的核心概念、索引过程以及如何利用其进行高效的全文搜索。 1. Lucene的基本概念 - **倒排索引**:Lucene的核心是倒排索引,这是一种数据结构,可以快速定位到文档中包含特定词的位置。在倒排...

    Lucene搜索引擎开发权威经典(附盘源码)【于天恩】.zip

    接着,它将详细讲解Lucene的安装和配置,以及如何创建、索引和搜索文档,让读者快速上手Lucene的基本操作。 在索引构建部分,书中的内容可能涵盖如何处理各种数据类型(如文本、数字、日期)的索引,以及如何利用...

    全文搜索-Lucene

    Lucene 实现了索引和搜索的核心算法,包括倒排索引、TF-IDF(词频-逆文档频率)等,使得开发者能够快速构建自己的全文检索系统。 **一、Lucene 的核心概念** 1. **倒排索引(Inverted Index)**:这是 Lucene 最...

    [Lucene搜索引擎开发权威经典].zip

    7. **过滤器和高亮显示**:Lucene支持在搜索结果中应用过滤条件,如日期范围或文档类型。同时,高亮显示功能可以突出显示匹配的查询词,提高用户体验。 8. **分布式搜索**:通过Solr或Elasticsearch等基于Lucene的...

    lucene索引入门[归类].pdf

    1. 索引模块(Index): Lucene 的索引模块是整个搜索引擎的核心,负责将数据源转换为可搜索的索引结构。索引模块的主要功能是将数据源解析成 Document 对象,然后将其写入索引中。 2. 检索模块(Search): Lucene...

    jsp+servlet+jdbc+lucene 搜索引擎

    在本项目中,Lucene被用来构建和管理索引,包括初始化索引、实时索引、关键字索引、数字及日期索引等。Lucene支持高效的全文检索,具备分词、模糊匹配、高亮显示等功能,极大地提高了搜索引擎的性能。 **项目结构与...

    基于Lucene的桌面搜索工具,搜索瞬间完成

    此外,为了提供更丰富的搜索体验,还可以为每个文件添加额外的元数据,如作者、创建日期和文件类型,这些信息也可以被索引。 搜索功能的实现涉及构建Query对象,这可以是简单的关键词查询,也可以是复杂的布尔...

    lucene3.0.3搜索的使用示例

    从"lucene3.0.3搜索的使用示例"中,你将学习如何编写代码来完成这些任务,包括索引创建、查询构造、搜索执行以及结果处理等。 在压缩包中的示例代码通常会涵盖这些概念,通过实际运行和调试这些代码,你可以深入...

Global site tag (gtag.js) - Google Analytics