`
longzhun
  • 浏览: 372117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lucene2.4第一个简单实例

 
阅读更多



 首先来认识下全文检索的工作流程:

 

 

 

java  Project 目录结构如图:


 

 


 

 package com.lebuqi.lucene; 	

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Filter;
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.junit.Test;

import com.lebuqi.lucene.utils.File2Document;

/**  
 * @Title: HelloWord.java 
 * @Package com.lebuqi.lucene 
 * @Description: TODO(添加描述) 
 * @author longzhun
 * @date 2011-8-6 下午07:13:56 
 * @version V1.0 
 */
public class HelloWord {

	String filePath = "G:\\work5\\luceneDemo\\luceneDatasource\\IndexWriter addDocument's a javadoc .txt";
	String indexPath = "G:\\work5\\luceneDemo\\luceneIndex";
	Analyzer analyzer = new StandardAnalyzer();
	/**
	 * 创建索引
	 * IndexWriter是用来操作(增,删,改)索引库的
	 */
	@Test
	public void createIndex() throws Exception{
		Document doc = File2Document.file2Document(filePath);
		
		IndexWriter indexWriter = new IndexWriter(indexPath,analyzer,true,MaxFieldLength.LIMITED);
		indexWriter.addDocument(doc);
		
		indexWriter.close();
	}
	/**
	 * 搜索
	 * @throws IOException 
	 * @throws CorruptIndexException 
	 */
	@Test
	public void seach() throws Exception{
		String queryString = "document";
		String[] fields = {"name","content"};
		QueryParser parser = new MultiFieldQueryParser(fields, analyzer);
		Query query = parser.parse(queryString);
		
		IndexSearcher indexSearcher = new IndexSearcher(indexPath);
		Filter filter = null;
		TopDocs topDocs = indexSearcher.search(query, filter, 10000);
		
		System.out.println("总共有"+topDocs.totalHits+"条匹配结果");
		
		for(ScoreDoc scoreDoc:topDocs.scoreDocs){
			int docSn = scoreDoc.doc; //文档内部编号
			Document doc = indexSearcher.doc(docSn); //根据文档编号取出相应文档
			
//			Field f = doc.getField("name");
//			f.stringValue();
			
			
			System.out.println("name    ="+doc.get("name"));
			System.out.println("content    ="+doc.get("content"));
			System.out.println("size    ="+doc.get("size"));
			System.out.println("path    ="+doc.get("path"));
		}
	}
}

	

 

File2Document .java

 

 package com.lebuqi.lucene.utils; 	

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;

/**  
 * @Title: File2Document.java 
 * @Package com.lebuqi.lucene.utils 
 * @Description: TODO(添加描述) 
 * @author longzhun
 * @date 2011-8-6 下午07:46:51 
 * @version V1.0 
 */
public class File2Document {

	public static Document file2Document(String path){
		File file = new File(path);
		
		//文件.name,content.size,path
		Document doc = new Document();
		doc.add(new Field("name", file.getName(),Store.YES,Index.ANALYZED ));
		doc.add(new Field("content", readFileContent(file),Store.YES,Index.ANALYZED ));
		doc.add(new Field("size", String.valueOf(file.length()),Store.YES,Index.NOT_ANALYZED));
		doc.add(new Field("path", file.getAbsolutePath(),Store.YES,Index.NO ));
		return doc;
	}

	private static String readFileContent(File file) {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
			StringBuffer content = new StringBuffer();
			for(String line = null;(line = br.readLine())!= null;){
				content.append(line).append("\n");
			}
			
			return content.toString();
		} catch (Exception e) {
				throw new RuntimeException(e);
		}
		
		
	}
}

	

 

  • 大小: 6.1 KB
  • 大小: 55 KB
分享到:
评论

相关推荐

    开源软件之道.part2of2

    这是第二部分,两个部分需要一起下载后,放在同一级目录,解压即可。 目录 第1篇 了解开源软件 第1章 开源软件概述 2 1.1 开源软件的理解 2 1.2 开源软件的定义 3 1.3 开源软件定义的意义 5 1.4 开源软件和其他...

    opencms内容管理

    - **去掉第一个opencms**:配置Apache使其不再包含OpenCMS名称。 - **去掉第二个opencms**:进一步优化URL,使得最终的网站地址更加简洁。 - **集成Apache、Tomcat和OpenCms的意义**:通过这种方式,可以实现静态...

    opencms内容管理用户指南

    - **2.3.2 去掉第一个opencms**:调整Apache配置文件,确保URL不包含“opencms”。 - **2.3.3 去掉第二个opencms**:进一步优化URL结构,提高用户体验。 - **2.3.4 集成Apache、Tomcat和OpenCms的意义**:这样的集成...

    OpenCMS教程

    - 修改Apache配置文件,移除第一个opencms。 - **2.3.3 去掉第二个opencms** - 继续修改Apache配置文件,去掉第二个opencms。 - **2.3.4 集成Apache、Tomcat和OpenCms的意义** - 提高系统的稳定性和安全性; -...

    开源企业搜索引擎SOLR的应用教程

    **3.2 一个简单的例子** - **3.2.1 SolrSchema设计**:定义需要索引的字段及其属性。 - **3.2.2 构建索引**:使用Solr API或SolrJ将数据导入索引中。 - **3.2.3 搜索测试**:通过发送查询请求到Solr服务器,获取...

    solr教材-PDF版

    **3.2 一个简单的例子** - **3.2.1 SolrSchema设计**:通过一个具体的例子展示如何设计SolrSchema。 - **3.2.2 构建索引**:演示如何使用Solr API或其他工具构建索引。 - **3.2.3 搜索测试**:展示如何通过Solr进行...

    Solrj 中文教程

    - **3.2.1 SolrSchema设计**:为示例项目设计一个简单的索引结构。 - **3.2.2 构建索引**:向Solr添加文档以构建索引。 - **3.2.3 搜索测试**:执行搜索测试,验证索引是否正确建立。 ##### 3.3 搜索引擎的规划设计...

    Solr3.5开发应用指导

    - **1.2.1 Solr使用Lucene并且进行了扩展**:Solr是一个开源的高性能搜索引擎,它基于Lucene构建,提供了更高级别的功能和服务,如全文检索、自动完成和实时更新等。 - **1.2.2 Schema(模式)**:Solr使用Schema来...

    OpenCMS内容管理入门指南(300页中文).pdf

    - **去掉第一个opencms**: 修改Apache配置文件,去除默认路径前缀。 - **去掉第二个opencms**: 继续修改配置,使URL更简洁。 - **集成意义**: 通过Apache与Tomcat的集成,提高网站性能和稳定性。 ##### 2.4 ...

    OpenCms中文指南

    - **去掉第一个opencms**: - 修改Apache配置文件,确保URL不包含"opencms"。 - **去掉第二个opencms**: - 调整Tomcat配置,进一步优化URL结构。 - **集成意义**: 提升用户体验,简化URL结构,增强安全性。 ##### ...

Global site tag (gtag.js) - Google Analytics