最近在做lucene,发现网上的lucene实例都不是很满意,所以自己做了个 ,如果哪有问题可以指出来
建立索引
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class AddIndex {
//path为索引存放地址
public void addIndex(String path) {
try{
Directory fsDir = FSDirectory.open(new File(path));
//记住,此处的分词器一定要和下面查询的分词器一致,否则会查不到数据
Analyzer analyzer = new IKAnalyzer();
IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_35, analyzer);
IndexWriter writer = new IndexWriter(fsDir, conf);
System.out.println("~~~建立索引~~~");
Document document1 = new Document();
document1.add(new Field("id", "1", Field.Store.YES, Field.Index.NO));
document1.add(new Field("address", "中国四川省成都市金牛区青羊东二路", Field.Store.YES, Field.Index.ANALYZED));
Document document2 = new Document();
document2.add(new Field("id", "2", Field.Store.YES, Field.Index.NO));
document2.add(new Field("address", "中国四川省成都市金牛区永陵路", Field.Store.YES, Field.Index.ANALYZED));
Document document3 = new Document();
document3.add(new Field("id", "3", Field.Store.YES, Field.Index.NO));
document3.add(new Field("address", "中国四川省成都市金牛区一环路西三段", Field.Store.YES, Field.Index.ANALYZED));
Document document4 = new Document();
document4.add(new Field("id", "4", Field.Store.YES, Field.Index.NO));
document4.add(new Field("address", "中国四川省成都市金牛区营门口路", Field.Store.YES, Field.Index.ANALYZED));
writer.addDocument(document1);
writer.addDocument(document2);
writer.addDocument(document3);
writer.addDocument(document4);
writer.forceMerge(1);
writer.close();
System.out.println("~~~索引建立完成~~~");
}catch (IOException e) {
System.out.println(e.toString());
}
}
}
查询数据
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class TestLucene {
private static String path = "e:\\lucene\\addressStore";
Analyzer analyzer = new IKAnalyzer();
private static File dataFile = new File(path);
private static String str = "中国四川省成都市金牛区营门口路";
private static String fiels = "address";
public static void main(String[] args) {
new AddIndex().addIndex(path);
try {
new TestLucene().search(str);
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
public void search(String keyword) throws IOException, ParseException {
Analyzer analyzer = new IKAnalyzer();
IndexSearcher isearcher = new IndexSearcher(IndexReader.open(FSDirectory.open(dataFile)));
//此处只需把分词器传进去,lucene会自动分词
QueryParser parser = new QueryParser(Version.LUCENE_35, fiels,analyzer);
Query query = parser.parse(keyword);
System.out.println(query.toString());
/**
* 执行搜索,获取查询结果集对象 10为前10条记录
*/
TopDocs topDocs = isearcher.search(query, 10);
ScoreDoc[] hits = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : hits) {
System.out.println("----------------分割线----------------------");
Document hitDoc = isearcher.doc(scoreDoc.doc);
float i = scoreDoc.score;
String address = hitDoc.get("address");
System.out.println("address:" + address+"\nsocre:"+i);
//打印打分细节,不需要可以去掉
//int docId = scoreDoc.doc;
//Explanation exp = isearcher.explain(query,docId);
//System.out.println(exp.toString());
}
isearcher.close();
}
}
查询结果
~~~建立索引~~~
~~~索引建立完成~~~
address:中国 address:国四 address:四川省 address:四川 address:四 address:省成 address:成都市 address:成都 address:都市 address:金牛区 address:金牛 address:营 address:门口 address:路
----------------分割线----------------------
address:中国四川省成都市金牛区营门口路
socre:0.9141956
----------------分割线----------------------
address:中国四川省成都市金牛区永陵路
socre:0.44761625
----------------分割线----------------------
address:中国四川省成都市金牛区青羊东二路
socre:0.39166427
----------------分割线----------------------
address:中国四川省成都市金牛区一环路西三段
socre:0.31202385
分享到:
相关推荐
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
2. **分词器(Tokenizer)与过滤器(Filter)**:Lucene支持自定义的分词规则,如`StandardTokenizer`和`LowerCaseFilter`。这些在`analysis`包下的源码中可以找到,它们负责将原始文本转换为可搜索的术语。 3. **...
在3.5版本中,Lucene已经支持了中文分词,这对于处理中文文档和搜索需求显得尤为重要。本文将深入探讨Lucene 3.5在中文分词方面的实现,以及如何利用其进行有效的中文信息检索。 一、Lucene 3.5中文分词基础 1. ...
这个压缩包包含了Lucene 3.5版本的一些关键组件,如中文分词器、核心包和高亮包等,这些对于构建高效、精确的文本搜索系统至关重要。 1. **中文分词器**: 在处理中文文本时,分词是必不可少的步骤。Lucene 3.5 包含...
本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...
Lucene 3.5广泛应用于网站搜索、日志分析、文档检索系统等场景。开发者可以通过源代码学习如何集成Lucene到自己的项目中,以实现高效、精确的全文检索功能。 总结,Lucene 3.5的源代码是理解其工作原理的宝贵资源。...
《Lucene 3.5:创建、增删改查详解》 Lucene 是一个高性能、全文本搜索库,被广泛应用于各种搜索引擎的开发。在3.5版本中,Lucene 提供了强大的文本分析和索引功能,以及对文档的高效检索。本文将详细介绍如何在...
《Lucene3.5实例详解:构建全文搜索引擎》 Apache Lucene是一个开源的全文检索库,为Java开发者提供了强大的文本搜索功能。在本实例中,我们将深入探讨如何使用Lucene 3.5版本来构建一个基本的全文搜索引擎,主要...
Lucene 3.5 API 是一个强大的工具集,提供了全面的文本检索功能,让开发者可以轻松地在应用程序中实现高效的全文搜索。无论是简单还是复杂的搜索需求,都能通过理解和运用这个 API 来实现。通过阅读提供的 HTML 版 ...
Lucene 3.5是一个重要的版本更新,它在2011年11月26日发布,为搜索引擎开发者提供了更高效、更稳定的功能。该版本在性能优化、新特性和错误修复上取得了显著的进步。 首先,Lucene 3.5在内存管理上有了显著的提升,...
1. **网站搜索引擎**:集成Lucene 3.5,实现站内快速全文搜索。 2. **数据挖掘**:利用Lucene进行大规模文本数据的预处理和索引,提高分析效率。 3. **日志分析**:通过索引和搜索日志,快速定位问题和异常。 六、...
Lucene 是一个由 Apache 软件基金会开发的全文搜索引擎库,它提供了强大的文本分析和索引功能,广泛应用于各种信息检索系统。在本文中,我们将深入探讨 Lucene 3.5 API,这是一个相对早期但仍然具有重要参考价值的...
- **近实时搜索**:Lucene 3.5 支持 Near Real Time (NRT) 搜索,即使在持续索引时,也能快速反映最新的索引变化。 - **多字段搜索**:允许同时在多个字段上进行搜索,提高查询效率。 - **命中高亮**:...
在“关于lucene3.5的使用”这个主题中,我们将深入探讨Lucene 3.5的关键特性、核心组件以及如何通过实例进行应用。首先,我们需要了解以下几个核心概念: 1. **索引(Index)**:Lucene 的工作基于索引,就像书籍的...
使用lucene-3.5和IKAnalyzer2012,实现基础的全文检索实现
### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...
Lucene是一个高性能、全文本搜索库,而IKAnalyzer是针对中文分词的开源分析器,特别适合于处理中文文档。 首先,我们要了解Lucene的基本概念。Lucene的核心功能包括文档索引、查询解析、评分和结果排序等。在3.5...
总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...
标题中的"solr_lucene3.5_lukeall-3.5.0.jar.zip" 提供了关于这个压缩包的基本信息。它包含了Solr和Lucene的特定版本——3.5.0,以及一个名为"lukeall"的工具。"Luke"在Lucene和Solr的上下文中是一个非常有用的工具...
总之,"Lucene测试程序3.5"为我们提供了一个深入理解Lucene如何处理全文搜索问题的实例。通过创建索引、使用标准分词器进行文本分析以及执行检索操作,我们可以看到Lucene如何在幕后高效地工作,使应用程序具备强大...