原来用过lucene做商城的商品检索,好久没动,最近工作需要,重新捡捡
今天是第一天
先将几个常用的api介绍下
Directory 创建索引库
抽象类 有4个实现子类 分别为 DbDirectory, FSDirectory(硬盘), JEDirectory, RAMDirectory(内存)
实际上源码根据操作系统选择对应的Directory ,window下是simpleDirectory
FSDirectory 创建索引库实现接口
Analyzer 分词器
可以把数据进行分词处理.不同的分词器分词结果不同,默认使用标准分词器(standarAnalyzer)
标准分词器针对英文方便,但是针对中文不行,中文的介绍使用IKAnalyzer分词器,(由国人林益良开源)
StandardAnalyzer 标准分词器
IndexWriter
索引管理对象IndexWriter ,需要注意的是该构造函数中的布尔值不要轻易填写,因为它会初始化索引库
IndexSearcher
查询索引工具类
QueryParser 查询字符串的解析器
将所有等待检索的字符串,根据分词器,解析成lucene查询query对象
Query 解析索引关键字数据封装体
TopDocs 解析数据回执总封装体
Document 创建索引记录封装体 相当于数据库中的一条sql记录
Field 创建索引记录中的字段 相当于数据中的一个字段,需要注意是该对象的构造方法中需要提供索引的划分
Store.YES: Index.ANALYZED(索引分词): 以后可以通过此字段查询,并且查询出来可以显示此字段
Store.NO: Index.ANALYZED(索引分词): 以后可以通过此字段查询,但是查询出来之后没有此字段
Store.YES: Index.NOT_ANALYZED(索引不分词): 以后可以通过此字段查询(字段全称),并且查询出来可以显示此字段
Store.NO: Index.NOT_ANALYZED(索引不分词): 以后可以通过此字段查询(字段全称),但是查询出来之后没有此字段
一个简单的api测试实现
import java.io.File; import java.io.FileReader; 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.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; 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.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.junit.Test; /** * 测试lucenapi * */ public class CopyOfLuceneApiTest { protected static final String INDEXSTOREPATH="F:\\lucene\\indexFile"; protected static final String READSTOREPAHT="F:\\lucene\\readFile"; @Test public void test()throws Exception{ save2Index("HelloAipImple"); //searcherIndex("package"); } public void save2Index(String key){ Directory dir = null; Analyzer an=null; IndexWriter indexWriter=null; try { dir=FSDirectory.open(new File(INDEXSTOREPATH)); an=new StandardAnalyzer(Version.LUCENE_CURRENT); indexWriter=new IndexWriter(dir, an, true, MaxFieldLength.LIMITED); Document doc=new Document(); doc.add(new Field("gnk", key, Store.YES, Index.NOT_ANALYZED_NO_NORMS)); doc.add(new Field("io", new FileReader("F:\\lucene\\readFile\\index.html"))); indexWriter.addDocument(doc); indexWriter.commit(); indexWriter.close(); } catch (IOException e) { e.printStackTrace(); } } public void searcherIndex(String keyWord) { Directory dc=null; IndexSearcher searcher=null; Analyzer an=null; try { an=new StandardAnalyzer(Version.LUCENE_30); dc=FSDirectory.open(new File(INDEXSTOREPATH)); searcher=new IndexSearcher(dc); QueryParser parse=new QueryParser(Version.LUCENE_30, "io",an); Query query=parse.parse(keyWord); TopDocs tdoc=searcher.search(query, 100); System.out.println(tdoc.totalHits); for(int i=0;i<tdoc.totalHits;i++){ ScoreDoc [] t=tdoc.scoreDocs; Document doc=searcher.doc(t[i].doc); System.err.println(doc.get("gnk")); System.err.println(doc.get("io")); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); }finally{ try { searcher.close(); } catch (IOException e) { e.printStackTrace(); } } } }
相关推荐
以下是对Lucene常用功能的详细介绍: 1. **创建索引** 创建索引是Lucene工作的第一步。通过`Directory`接口,如`FSDirectory`,Lucene可以读写文件系统中的索引。`IndexWriter`类负责实际的索引构建过程,它允许...
Lucene常用代码详解 Lucene是一款功能强大且高效的搜索引擎,广泛应用于各种搜索应用程序中。为了更好地使用Lucene,需要了解其核心API和常用代码。本文将对Lucene部分常用代码进行详细解释,包括多字段搜索、多...
**Lucene 3.0英文API详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它提供了一个简单且可扩展的接口,用于在各种应用程序中实现搜索功能。Lucene 3.0是该库的一个重要版本,引入了许多...
它提供了一个简单的 Java API,使得开发者能够方便地在应用程序中实现索引和搜索功能。在这个主题中,我们将深入探讨 Lucene 的基本使用方法,包括如何集成 IK 分词器以及实现高亮显示。 ### 1. Lucene 的核心概念 ...
总之,Lucene是一个强大的全文检索工具,通过其API,开发者可以轻松地在Java应用中实现高效、灵活的搜索功能。无论你是希望为网站添加搜索功能,还是构建大型的企业级搜索解决方案,Lucene都是值得信赖的选择。通过...
在实际应用中,Lucene通常与其他技术结合使用,例如Solr或Elasticsearch,它们提供了更高级的功能,如分布式搜索、集群管理和RESTful API。这部分源码可能未涵盖这些,但对理解Lucene的基本工作原理和内部机制非常有...
Lucene是一个开源的全文搜索引擎API,提供了完整的查询引擎和索引引擎,部分文本分析引擎。通过使用Lucene,可以对Oracle数据库中的数据建立索引,并提供快速的全文检索功能。 Lucene的优点在于其跨平台和简单易用...
`QueryParser`类是主要的入口点,它可以将简单的自然语言查询(如"北京天气")转化为Lucene可以理解的`Query`对象。同时,这个包还包含了一些查询构造函数,如`BooleanQuery`、`TermQuery`等,使得开发者能够构建...
1. **官方文档**:Apache 官网提供的文档是学习 Lucene 的重要资源,包括 API 文档、用户指南和开发者指南。 2. **示例代码**:通过分析和运行示例代码,可以快速理解 Lucene 的基本用法。 3. **实战项目**:实践...
此外,它还提供了一个简单的API,使得开发者可以方便地集成到自己的应用中。 总之,Lucene-2.9.2是一个功能强大的全文检索库,它的中文分词能力和TF-IDF搜索引擎设计,使得开发者能够构建高效、准确的信息检索系统...
读者将了解到如何利用Lucene提供的API进行精确匹配、模糊搜索、短语查询等高级搜索功能。 第4章专门讨论中文分词,由于中文语言的特性,分词是中文搜索引擎的一大挑战。作者介绍了几种常见的中文分词器,如IK ...
3. **执行查询**:使用 Lucene 的 API 来执行查询。 4. **结果处理**:获取查询结果并对结果进行进一步处理,如排序、高亮显示等。 #### 四、分析(Analysis) **分析** 是指在索引和查询过程中对文本数据进行预处理...
它提供了一个简单的API,用于索引文本内容并执行快速、复杂的全文搜索。Lucene的核心功能包括分词、建立倒排索引、查询解析和结果排序。在Android中使用Lucene,可以为应用程序添加强大的本地搜索能力。 **Android...
Lucene的目的是为软件开发人员提供一个简单易用的API,使得他们能够在自己的应用程序中加入全文搜索功能。Lucene可以用于全文搜索、索引管理、搜索结果排序、查询分析等功能,是搜索引擎的核心组件之一。 Heritrix...
而Lucene-Sugar,则是在流行的全文搜索引擎库Apache Lucene基础上,增添了一些甜美的“糖分”,使得操作变得更加简单易用。现在,让我们一起深入探讨这两个项目。 首先,Groovy 2.0.0-final是Groovy语言的一个稳定...
- SVM(支持向量机)是一种常用的分类算法。 - 可以用于文本分类任务。 - **5.7.3 多级分类** - 对于复杂的数据集,可以采用多级分类策略。 - 有助于提高分类准确率。 **5.8 自动聚类** - **5.8.1 聚类的定义...
- **RESTful API**:提供了简单易用的 RESTful API 接口,方便与多种编程语言集成。 - **全文搜索**:支持高效的全文检索功能,能够快速定位文档中的关键词。 - **复杂性隐藏**:ES 隐藏了 Lucene 的底层复杂性,...