`
zhangzcz1999
  • 浏览: 148276 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Lucene 搜索试用

阅读更多
传说中强大的Lucene搜索,首先要创建索引:
import java.io.IOException;
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.Term;
import org.apache.lucene.store.LockObtainFailedException;

public class TextFileIndexer {
	private IndexWriter indexWriter;

	public TextFileIndexer(String directory) {
		try {
			indexWriter = new IndexWriter(directory, new StandardAnalyzer(),
					true);
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws Exception {
		TextFileIndexer indexer = new TextFileIndexer("/home/com/tmp/index");
		indexer.create("/home/sina", "axu你发三段论法的撒肥撒旦", "了脑门大量的萨考虑我的");
		indexer.create("/home/blog", "9726", "java");
//		 indexer.delete("/home/blog");
		indexer.commit();
	}

	public void create(String path, String title, String content) {
		Document document = new Document();
		Field fieldPath = new Field("path", path, Field.Store.YES,
				Field.Index.NO);
		Field fieldTitle = new Field("title", title, Field.Store.YES,
				Field.Index.TOKENIZED);
		Field fieldContent = new Field("content", content, Field.Store.NO,
				Field.Index.TOKENIZED);
		document.add(fieldPath);
		document.add(fieldTitle);
		document.add(fieldContent);
		try {
			indexWriter.addDocument(document);
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void commit() {
		try {
			indexWriter.optimize();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void delete(String path) {
		Term term = new Term("path", path);
		try {
			indexWriter.deleteDocuments(term);
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void update(String path, String title, String content) {
		this.delete(path);
		this.create(path, title, content);
	}
}


然后就可以进行搜索了,搜索创建好的索引:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.LockObtainFailedException;

public class TextFileSearcher {
	private IndexSearcher searcher;

	public TextFileSearcher(String directory) {
		try {
			searcher = new IndexSearcher(directory);
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws Exception {
		TextFileSearcher indexer = new TextFileSearcher("/home/com/tmp/index");
		List<Document> list = indexer.search("9726");
		for (Document document : list) {
			System.out.println(document.get("path"));
		}
	}

	public List<Document> search(String keyword) {
		List<Document> resultset = new ArrayList<Document>();
		Analyzer analyzer = new StandardAnalyzer();
		try {
			QueryParser parser = new QueryParser(null, analyzer);
			Query query = parser.parse("title:" + keyword + " OR content:"
					+ keyword);
			Hits hits = searcher.search(query);
			for (int i = 0; i < hits.length(); i++) {
				resultset.add(hits.doc(i));
			}
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return resultset;
	}

}

分享到:
评论

相关推荐

    lucene in ation

    根据提供的标题、描述和部分文本内容,我们可以推测“Lucene in Action”这本书是关于Lucene这一强大全文搜索引擎库的深入介绍和技术指南。由于提供的部分内容仅包含试用版本声明及网址,无法从中直接提取具体的技术...

    基于lucene4.3的知识图谱搜索引擎XunTa(一种用"知识点"来找人的搜人引擎).zip

    你可以通过试用下面的网站来测试部分功能。 遇到任何技术问题,或对搜索创意感兴趣,欢迎加入寻TA网官方QQ群(298342166)讨论,也可发邮件(Email:1019357922@qq.com)或致电(18521702948,13817385089)垂询. 下载...

    LucenePrograms:一些试用 Lucene 程序的回购

    标题“LucenePrograms:一些试用 Lucene 程序的回购”指出,这是一组基于Lucene的示例程序,用于帮助开发者了解和实践如何使用Lucene这个全文搜索引擎库。Lucene是Apache软件基金会的一个开源项目,它提供了一个高级...

    JEESite JAR包1,试用

    2. **lucene-kuromoji-3.6.2.jar**:Apache Lucene是一个全文搜索引擎库,而kuromoji是其针对日语的分词器。这个组件能够对日语文档进行索引和搜索,对日文文本处理具有重要意义。 3. **lucene-smartcn-3.6.2.jar**...

    Elasticsearch 6.5.1 xpack 试用版安装教程20200701.pdf

    首先,Elasticsearch是一个基于Lucene构建的开源搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并在Apache许可证下作为开源发布。它是一种广泛使用的...

    compass_使用详解.pdf compass_教程 compass_试用案例

    - **Compass** 作为连接 Lucene 和 Hibernate 的桥梁,提供了类似于 Hibernate 的接口来操作 Lucene。 - **特点**:简化了 Lucene 的使用,同时保留了 Lucene 的高性能和灵活性。 #### 三、Compass 的使用步骤 ...

    luncene in action002

    尽管给出的部分内容反复提到“trial version”(试用版)并指向了一个似乎是无关的网站“www.adultpdf.com”,但我们可以假设这里的目标是探讨与Lucene相关的知识点。 ### Lucene简介 Apache Lucene是一个开放源...

    crawler爬虫资料

    - `wa-lucene2_source_code`:这个名字暗示它与Lucene有关,Lucene是Apache的一个全文搜索引擎库。在这个上下文中,`wa-lucene2_source_code`可能是一个使用Lucene进行网页内容搜索和索引的项目源代码。在爬虫项目...

    阿里云java短信验证码源码-shiyanlou-002:实验偶哦测试

    like、Lucene、es、OpenSearch) 用户投稿 页面管理 评论管理 附件管理 电商相关 产品管理 产品分类 产品标签 产品搜索(支持 sql like、Lucene、es、OpenSearch) 产品分销 会员管理 订单管理 分销管理 提现管理 ...

    ElasticHD-master.zip

    Elasticsearch是一种开源的全文搜索引擎,基于Lucene构建,具有分布式、实时、高可扩展性等特点。它不仅能够处理海量数据,还支持复杂的搜索功能,广泛应用于日志分析、网站搜索、物联网数据分析等领域。Elastic...

    es6.3.tar.gz

    Elasticsearch(简称ES)是一款流行的、基于Lucene的开源搜索引擎,被广泛应用于日志分析、实时监控、数据搜索和大数据分析等多个领域。版本6.3是其历史上的一个重要版本,带来了许多性能优化和新特性。 1. **版本...

    box-kuromoji-elasticsearch:一个带有Kuromoji插件的Elasticsearch的Wercker盒子

    弹性搜索框 一个带有kuromoji插件的用于Elasticsearch的wercker盒子。入门$ git clone https://github.com/wantedly/box-kuromoji-elasticsearch.git && cd box-kuromoji-elasticsearch$ script/bootstrap版本0.1.0 ...

    Intellij IDEA编译调试Elasticsearch 6.1.0源码

    Elasticsearch是一个基于Lucene构建的开源搜索引擎,它允许用户快速执行全文搜索、结构化搜索甚至是复杂分析。Intellij IDEA是一个强大的集成开发环境(IDE),它广泛用于Java开发,并支持其他编程语言和框架,包括...

Global site tag (gtag.js) - Google Analytics