注意使用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来创建和查询索引,帮助你深入理解其核心概念和操作流程。 ### 1. Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段...
它为开发者提供了构建搜索应用所需的所有基本工具,包括索引文档、执行查询、处理分析等。Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的...
【Lucene 索引结构原理】 Lucene 是一个高性能、全文检索的开源库,它主要处理非结构化的数据,如邮件、Word 文档等。与传统的数据库不同,Lucene 更专注于文本的检索,而非存储和管理结构化数据。本文将深入探讨...
- **索引查询**:基于预构建的索引结构,能够快速找到匹配的文档,是Lucene的主要查询方式。 2. **理论模型**: - **布尔模型**:基于集合论和布尔代数,用户查询被视为布尔表达式,文档被看作布尔变量,通过AND...
创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。然后,使用Document类表示要索引的数据,Field类...
Lucene 是一个流行的开源全文搜索引擎库,其核心功能之一就是构建高效的索引。索引文件格式是Lucene实现快速搜索的关键。以下是对Lucene索引文件格式的详细说明。 首先,我们要理解Lucene索引的基本结构。一个...
2. **字段浏览**:LukeAll可以展示索引中的所有字段,包括字段名、字段类型(如文本、数值或日期)、是否可搜索、是否存储等属性。这对于理解和调整索引策略至关重要,因为它揭示了文档数据如何被组织和处理。 3. *...
搜索时,Lucene会对每个查询词查找倒排索引,找到包含这些词的文档。然后,根据查询中的布尔运算符(AND、OR、NOT等)、短语匹配、权重计算等来筛选和排序结果。 7. **评分与排序**: Lucene使用TF-IDF(Term ...
首先,我们需要了解Lucene的基本操作流程,包括索引构建、查询解析和结果检索。在C#中,我们可以使用Apache.Lucene.Net库来操作Lucene。创建索引时,我们需要将包含时间戳的文档字段(如"created_at"或"modified_...
- **预分析 (Analyzer)**:选择合适的分词器(Analyzer)对查询词进行预处理,确保与索引中的处理方式一致。 - **过滤器 (Filtering)**:使用Filter可以对结果集进行进一步筛选,如按时间、地理位置等条件。 - **...
- **Solr**和**Elasticsearch**:基于Lucene的分布式搜索平台,提供了更高级的功能,如多节点集群、实时索引、复杂查询语法等。 了解并掌握Lucene的索引机制,对于开发高性能的全文检索应用至关重要。无论是从底层...
Lucene 的核心组件包括索引模块、检索模块、语言分析器、查询分析器、存储结构等。 1. 索引模块(Index): Lucene 的索引模块是整个搜索引擎的核心,负责将数据源转换为可搜索的索引结构。索引模块的主要功能是将...
这些特性使得Lucene可以处理复杂的查询场景,比如根据用户评分、发布日期等因素调整搜索结果的排序。 在实际应用中,我们还需要考虑性能优化。例如,通过使用Filter进行范围查询,可以减少不必要的文档扫描;或者...
Lucene的核心功能包括文档的索引、查询解析、评分和结果排序。 在书中,作者详细讲解了Lucene的索引过程,包括如何将文本数据转换为倒排索引,这是Lucene高效搜索的基础。倒排索引是一种数据结构,它将每个单词映射...
【标题】"lucene检索新闻数据演示"涉及的是利用Apache Lucene这个开源全文搜索引擎库,对新闻数据进行索引和搜索的实践操作。Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在...
作为一款Java实现的全文搜索引擎架构,Lucene 提供了完整的索引和查询引擎,使得开发者能够快速、有效地在大量数据中进行文本搜索。 ### Lucene 的核心组件 1. **索引(Indexing)**: Lucene 的索引过程将文档内容...
Lucene是一个高性能、全文本搜索库,它提供了丰富的搜索功能,包括布尔运算、短语查询、模糊搜索、评分机制等。在这一阶段的项目中,我们将关注更复杂和定制化的搜索需求,以提升用户的搜索体验。 1. **多字段搜索*...
首先,Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。文档是信息的基本单位,可以包含多个字段,每个字段都有特定的类型,如文本、日期或数字。索引过程将文档中的文本转换...
总结来说,Lucene 4.6.0是一个强大且高效的全文检索库,它提供了一整套完整的解决方案,包括文档管理、索引构建、查询解析和结果排名等。对于需要在应用中实现复杂搜索功能的开发者来说,Lucene 4.6.0无疑是一个值得...
在本主题中,我们将深入探讨如何使用Lucene进行创建、删除、修改和组合条件查询,以及如何实现类似MySQL中的LIKE、IN、OR和时间范围条件查询。 首先,**创建索引**是使用Lucene的第一步。创建索引涉及到读取数据源...