`
feizhang666
  • 浏览: 39700 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

lucene3.5分词+搜索

阅读更多

最近在做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 实例中文分词通过

    lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词

    Lucene3.5源码jar包

    2. **分词器(Tokenizer)与过滤器(Filter)**:Lucene支持自定义的分词规则,如`StandardTokenizer`和`LowerCaseFilter`。这些在`analysis`包下的源码中可以找到,它们负责将原始文本转换为可搜索的术语。 3. **...

    lucene3.5中文分词案例

    在3.5版本中,Lucene已经支持了中文分词,这对于处理中文文档和搜索需求显得尤为重要。本文将深入探讨Lucene 3.5在中文分词方面的实现,以及如何利用其进行有效的中文信息检索。 一、Lucene 3.5中文分词基础 1. ...

    lucene3.5的各种包

    这个压缩包包含了Lucene 3.5版本的一些关键组件,如中文分词器、核心包和高亮包等,这些对于构建高效、精确的文本搜索系统至关重要。 1. **中文分词器**: 在处理中文文本时,分词是必不可少的步骤。Lucene 3.5 包含...

    lucene3.5全文检索案例lucene+demo

    本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...

    lucene 3.5 官网 源代码

    Lucene 3.5广泛应用于网站搜索、日志分析、文档检索系统等场景。开发者可以通过源代码学习如何集成Lucene到自己的项目中,以实现高效、精确的全文检索功能。 总结,Lucene 3.5的源代码是理解其工作原理的宝贵资源。...

    lucene3.5的创建和增删改查

    《Lucene 3.5:创建、增删改查详解》 Lucene 是一个高性能、全文本搜索库,被广泛应用于各种搜索引擎的开发。在3.5版本中,Lucene 提供了强大的文本分析和索引功能,以及对文档的高效检索。本文将详细介绍如何在...

    Lucene3.5实例

    《Lucene3.5实例详解:构建全文搜索引擎》 Apache Lucene是一个开源的全文检索库,为Java开发者提供了强大的文本搜索功能。在本实例中,我们将深入探讨如何使用Lucene 3.5版本来构建一个基本的全文搜索引擎,主要...

    Lucene 3.5 api HTML版

    Lucene 3.5 API 是一个强大的工具集,提供了全面的文本检索功能,让开发者可以轻松地在应用程序中实现高效的全文搜索。无论是简单还是复杂的搜索需求,都能通过理解和运用这个 API 来实现。通过阅读提供的 HTML 版 ...

    Lucene3.5的学习研究报告

    Lucene 3.5是一个重要的版本更新,它在2011年11月26日发布,为搜索引擎开发者提供了更高效、更稳定的功能。该版本在性能优化、新特性和错误修复上取得了显著的进步。 首先,Lucene 3.5在内存管理上有了显著的提升,...

    lucene 3.5学习笔记

    1. **网站搜索引擎**:集成Lucene 3.5,实现站内快速全文搜索。 2. **数据挖掘**:利用Lucene进行大规模文本数据的预处理和索引,提高分析效率。 3. **日志分析**:通过索引和搜索日志,快速定位问题和异常。 六、...

    Lucene 3.5&API,最新版

    Lucene 是一个由 Apache 软件基金会开发的全文搜索引擎库,它提供了强大的文本分析和索引功能,广泛应用于各种信息检索系统。在本文中,我们将深入探讨 Lucene 3.5 API,这是一个相对早期但仍然具有重要参考价值的...

    lucene3.5的API

    - **近实时搜索**:Lucene 3.5 支持 Near Real Time (NRT) 搜索,即使在持续索引时,也能快速反映最新的索引变化。 - **多字段搜索**:允许同时在多个字段上进行搜索,提高查询效率。 - **命中高亮**:...

    关于lucene3.5的使用

    在“关于lucene3.5的使用”这个主题中,我们将深入探讨Lucene 3.5的关键特性、核心组件以及如何通过实例进行应用。首先,我们需要了解以下几个核心概念: 1. **索引(Index)**:Lucene 的工作基于索引,就像书籍的...

    2018-01lucene-3.5和IKAnalyzer2012全文分词检索技术文档

    使用lucene-3.5和IKAnalyzer2012,实现基础的全文检索实现

    lucene3.5学习笔记

    ### Lucene 3.5 学习笔记 #### 一、Lucene 3.5 基本概念 ##### 1.1 Lucene 概述 **1.1.1 IndexWriter** `IndexWriter` 是 Lucene 中的核心类之一,用于创建或更新索引。它提供了添加文档、删除文档、优化索引等...

    全文检索lucence3.5+IKAnalzers3.5示例

    Lucene是一个高性能、全文本搜索库,而IKAnalyzer是针对中文分词的开源分析器,特别适合于处理中文文档。 首先,我们要了解Lucene的基本概念。Lucene的核心功能包括文档索引、查询解析、评分和结果排序等。在3.5...

    lucene+中文IK分词器 例子

    总结来说,"lucene3.5 + ik中文分词器例子"是一个展示如何使用Lucene进行中文全文检索的示例,它涵盖了从数据抓取、分词处理、索引建立到查询执行的全过程。通过这个实例,开发者可以更好地理解和掌握Lucene与IK分词...

    solr_lucene3.5_lukeall-3.5.0.jar.zip

    标题中的"solr_lucene3.5_lukeall-3.5.0.jar.zip" 提供了关于这个压缩包的基本信息。它包含了Solr和Lucene的特定版本——3.5.0,以及一个名为"lukeall"的工具。"Luke"在Lucene和Solr的上下文中是一个非常有用的工具...

    Lucene测试程序3.5

    总之,"Lucene测试程序3.5"为我们提供了一个深入理解Lucene如何处理全文搜索问题的实例。通过创建索引、使用标准分词器进行文本分析以及执行检索操作,我们可以看到Lucene如何在幕后高效地工作,使应用程序具备强大...

Global site tag (gtag.js) - Google Analytics