`
zhxmyself
  • 浏览: 40664 次
  • 来自: ...
社区版块
存档分类
最新评论

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来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...

    Lucene3.0创建索引

    它为开发者提供了构建搜索应用所需的所有基本工具,包括索引文档、执行查询、处理分析等。Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的...

    lucene索引结构原理.docx

    【Lucene 索引结构原理】 Lucene 是一个高性能、全文检索的开源库,它主要处理非结构化的数据,如邮件、Word 文档等。与传统的数据库不同,Lucene 更专注于文本的检索,而非存储和管理结构化数据。本文将深入探讨...

    Lucene3.0之查询类型详解

    - **索引查询**:基于预构建的索引结构,能够快速找到匹配的文档,是Lucene的主要查询方式。 2. **理论模型**: - **布尔模型**:基于集合论和布尔代数,用户查询被视为布尔表达式,文档被看作布尔变量,通过AND...

    lucene 4.7.2 Demo

    创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。然后,使用Document类表示要索引的数据,Field类...

    lucene索引文件格式介绍

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

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

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

    lucene全文索引原理

    搜索时,Lucene会对每个查询词查找倒排索引,找到包含这些词的文档。然后,根据查询中的布尔运算符(AND、OR、NOT等)、短语匹配、权重计算等来筛选和排序结果。 7. **评分与排序**: Lucene使用TF-IDF(Term ...

    Lucene时间区间搜索

    首先,我们需要了解Lucene的基本操作流程,包括索引构建、查询解析和结果检索。在C#中,我们可以使用Apache.Lucene.Net库来操作Lucene。创建索引时,我们需要将包含时间戳的文档字段(如"created_at"或"modified_...

    lucene的查询语法事例

    - **预分析 (Analyzer)**:选择合适的分词器(Analyzer)对查询词进行预处理,确保与索引中的处理方式一致。 - **过滤器 (Filtering)**:使用Filter可以对结果集进行进一步筛选,如按时间、地理位置等条件。 - **...

    lucene索引

    - **Solr**和**Elasticsearch**:基于Lucene的分布式搜索平台,提供了更高级的功能,如多节点集群、实时索引、复杂查询语法等。 了解并掌握Lucene的索引机制,对于开发高性能的全文检索应用至关重要。无论是从底层...

    lucene索引入门[归类].pdf

    Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index): Lucene 的索引模块是整个搜索引擎的核心,负责将数据源转换为可搜索的索引结构。索引模块的主要功能是将...

    lucene高级智能查询小案例

    这些特性使得Lucene可以处理复杂的查询场景,比如根据用户评分、发布日期等因素调整搜索结果的排序。 在实际应用中,我们还需要考虑性能优化。例如,通过使用Filter进行范围查询,可以减少不必要的文档扫描;或者...

    Lucene+in+action中文版

    Lucene的核心功能包括文档的索引、查询解析、评分和结果排序。 在书中,作者详细讲解了Lucene的索引过程,包括如何将文本数据转换为倒排索引,这是Lucene高效搜索的基础。倒排索引是一种数据结构,它将每个单词映射...

    lucene检索新闻数据演示

    【标题】"lucene检索新闻数据演示"涉及的是利用Apache Lucene这个开源全文搜索引擎库,对新闻数据进行索引和搜索的实践操作。Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在...

    Lucene源码

    作为一款Java实现的全文搜索引擎架构,Lucene 提供了完整的索引和查询引擎,使得开发者能够快速、有效地在大量数据中进行文本搜索。 ### Lucene 的核心组件 1. **索引(Indexing)**: Lucene 的索引过程将文档内容...

    lucene高级搜索进阶项目_04

    Lucene是一个高性能、全文本搜索库,它提供了丰富的搜索功能,包括布尔运算、短语查询、模糊搜索、评分机制等。在这一阶段的项目中,我们将关注更复杂和定制化的搜索需求,以提升用户的搜索体验。 1. **多字段搜索*...

    Annotated Lucene 中文版 Lucene源码剖析

    首先,Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。文档是信息的基本单位,可以包含多个字段,每个字段都有特定的类型,如文本、日期或数字。索引过程将文档中的文本转换...

    lucene-4.6.0全套jar包

    总结来说,Lucene 4.6.0是一个强大且高效的全文检索库,它提供了一整套完整的解决方案,包括文档管理、索引构建、查询解析和结果排名等。对于需要在应用中实现复杂搜索功能的开发者来说,Lucene 4.6.0无疑是一个值得...

    luceneDemo

    Lucene 支持索引多种文档格式,并且具有强大的查询解析和排序能力。 **核心组件** 1. **索引(Indexing)**: Lucene 的首要任务是将非结构化的文本数据转化为可搜索的索引。这个过程包括分词(Tokenization)、...

Global site tag (gtag.js) - Google Analytics