需求:
内容包括两部分,一部分为唯一标示即id,一部分为内容,要实现对内容基于lucene的检索,模拟实现基于uuid作为id,内容为普通的字符串
环境:
<dependency> <groupId>org.safehaus.jug</groupId> <artifactId>jug</artifactId> <version>2.0.0</version> <classifier>lgpl</classifier> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>IKAnalyzer</groupId> <artifactId>IKAnalyzer</artifactId> <version>IKAnalyzer2012_u6</version> <scope>system</scope> <systemPath>D:/tools/lib/IKAnalyzer2012_u6.jar</systemPath> </dependency>
实现:
public class IndexService { private static final UUIDGenerator generator = UUIDGenerator.getInstance(); private static final String indexDir = "D:/tools/index"; private static final Occur[] QUERY_FLAGS = { Occur.SHOULD, Occur.SHOULD }; public void createIndex(String content) throws Exception { UUID uuid = generator.generateRandomBasedUUID(); Directory directory = new org.apache.lucene.store.SimpleFSDirectory( new File(indexDir)); Analyzer analyzer = new IKAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, analyzer); IndexWriter writer = new IndexWriter(directory, config); Document doc = new Document(); doc.add(new Field("str", content, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("id", uuid.toString(), Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.optimize(); writer.close(true); } public void queryIndex(String queryString) throws Exception { Analyzer analyzer = new IKAnalyzer(); BooleanQuery bq = new BooleanQuery(); Query q = MultiFieldQueryParser.parse(Version.LUCENE_34, queryString, new String[] { "str", "id" }, QUERY_FLAGS, analyzer); bq.add(q, BooleanClause.Occur.MUST); Directory directory = new org.apache.lucene.store.SimpleFSDirectory( new File(indexDir)); IndexSearcher indexSearcher = new IndexSearcher(directory); TopDocs topDocs = indexSearcher.search(bq, 2); System.out.println(topDocs.totalHits); ScoreDoc[] hits = topDocs.scoreDocs; for (ScoreDoc scoreDoc : hits) { Document document = indexSearcher.doc(scoreDoc.doc); System.out.println(String.format("doc id is %s ,and score is %s:", document.get("id"), scoreDoc.score + "")); } indexSearcher.close(); } public static void main(String[] ar) throws Exception { IndexService indexService = new IndexService(); StringBuilder content = new StringBuilder(); content.append("茶道,就是品赏茶的美感之道。茶道是一种烹茶饮茶的生活艺术,一种以茶为媒的生活礼仪,一种以茶修身的生活方式。"); content.append("它通过沏茶、赏茶、闻茶、饮茶、增进友谊,美心修德,学习礼法,是很有益的一种和美仪式。"); content.append("喝茶能静心、静神,有助于陶冶情操、去除杂念,符合儒道的“内省修行”思想。"); content.append("茶道精神是茶文化的核心,是茶文化的灵魂。本账户的宗旨是传播茶叶,茶道,品茶,辨别的知识,让大家了解中华国粹。"); // 模拟100篇文本内容 for (int i = 0; i < 100; i++) { indexService.createIndex(content.toString()); } indexService.queryIndex("茶叶"); } }
相关推荐
- **首次创建索引**:首先,我们需要遍历整个数据源,创建每个文档的实例,然后将这些文档添加到Lucene的索引writer中。完成这一步后,就会生成一个完整的初始索引。 - **监控数据变更**:为了实现增量索引,我们...
然后,索引器对抓取的网页进行处理,创建索引;最后,查询处理器接收用户的搜索请求,并利用索引返回相关的搜索结果。 2.2 搜索引擎的构成 2.2.1 网络机器人 网络机器人是搜索引擎的第一步,它们自动地遍历互联网...
1) 提供实时索引的创建、管理 2) Query的创建 详细介绍参照博客:http://blog.csdn.net/xiaojimanman/article/details/20624739 中的介绍
创建索引 创建Lucene索引的步骤包括: 1. **初始化Directory**:选择存储索引的目录,如FSDirectory(文件系统)、RAMDirectory(内存)等。 2. **创建IndexWriter**:配置IndexWriter实例,指定Directory、...
创建索引时,Lucene会读取输入文档,进行分词处理,然后为每个词创建倒排索引。搜索时,用户输入的查询会被转换成词项列表,然后Lucene会查找这些词项在索引中的对应信息,通过评分算法确定相关性,最终返回最相关的...
综上所述,基于Lucene的分布式并行索引技术是解决大数据环境下高效索引构建问题的有效手段。通过采用内存缓冲机制、分布式处理和智能合并策略等关键技术,不仅可以显著提升索引构建的速度,还能有效改善用户体验。...
1) 提供实时索引的创建、管理 2) Query的创建 详细功能参照博客:http://blog.csdn.net/xiaojimanman/article/details/20624739 中的介绍
- 基于解析出的信息,使用Lucene的API创建索引。 - 对于每个文档元素,创建对应的`Field`对象,并添加到`Document`对象中。 - 将`Document`对象添加到`IndexWriter`中。 #### 五、结论 通过上述步骤,我们可以...
**基于Lucene的搜索引擎** Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它是Java编写的一个高性能、可扩展的信息检索库,为开发者提供了构建搜索功能的基础框架。这个课程设计创建了一个简单的...
创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。然后,使用Document类表示要索引的数据,Field类...
在本文中,我们将深入探讨如何基于Lucene 2.4版本创建简单的全文索引并进行搜索操作。 一、Lucene基本概念 1. 文档(Document):在Lucene中,一个文档代表了要索引的信息源,它可以是网页、电子邮件、PDF文档等。...
开发者可以创建索引,执行查询,处理结果,并进行必要的文本分析。 **4. 实现流程** 构建基于Lucene的搜索引擎通常涉及以下几个步骤: - **文本预处理**:包括分词、去除停用词、词干提取等,以减少噪声和提高搜索...
本项目以"基于lucene的Swing全文索引构建于查询工具及源程序"为主题,旨在帮助初学者理解和掌握如何利用Lucene和Swing来创建一个桌面应用程序,实现文件的全文索引和查询功能。 Lucene的核心概念包括以下几个部分:...
本文将重点介绍如何使用Lucene创建索引以及如何基于这些索引进行高效的搜索。 #### 二、创建索引 ##### 2.1 准备工作 在开始之前,我们需要做一些准备工作: - **安装Java环境**:Lucene基于Java开发,因此首先...
《基于Lucene的小型搜索引擎构建详解》 在信息爆炸的时代,如何快速、准确地找到所需信息成为了一项挑战。搜索引擎作为解决这一问题的关键工具,其技术实现也引起了广泛关注。本篇将详细介绍一个基于Apache Lucene...
3. 工具支持:Lucene提供了丰富的工具和API,如Luke工具可以查看索引结构,Solr和Elasticsearch则是基于Lucene的全文搜索引擎服务,提供了更高级的功能和服务。 综上,深入理解Lucene的索引机制有助于优化搜索性能...
3) 创建索引:索引器将分析后的术语构建为倒排索引。 4) 存储索引:索引保存在磁盘上,以便后续搜索使用。 5) 搜索:用户提交查询,查询解析器将其转化为索引中的术语。 6) 匹配与排序:搜索器在索引中查找匹配的...
“基于LUCENE的搜索引擎的设计与实现源代码”项目,提供了从数据抓取、索引构建到搜索功能实现的完整流程,是学习和实践LUCENE的好材料。通过阅读源代码,我们可以了解如何将理论知识应用到实际开发中,提升搜索引擎...
综上所述,基于Lucene 3.0的书籍查询系统利用了Lucene的强大搜索功能,结合合理的索引和查询策略,为用户提供高效、精准的书籍搜索服务。开发者可以根据实际需求,通过扩展和定制,进一步提升系统的功能性和性能。