package luceneDemo;
import java.io.File;
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.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.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;
import domain.Person;
@SuppressWarnings("deprecation")
public class Demo1 {
@Test
public void hello() throws Exception{
Person p = new Person();
p.setId(1);
p.setName("jia贾宝玉");
p.setDesc("我是天生大王,不能得罪");
/**把对象的每个属性转换成字段(field)
* 第一个参数:保存在内容中的名称
* 第二个参数:要保存在内容的值
* 第三个参数:是否保存在内容中
* yes是保存,no就是不用保存.
* 第四个参数:是否保存在目录中
* index.no:不保存目录
* index.not_analyzed:保存目录,但是不分词
* index.analyzed:保存目录并且分词
*/
Field fieldId = new Field("id",p.getId().toString(),Store.YES,Index.NOT_ANALYZED);
Field fieldName = new Field("name",p.getName(),Store.YES,Index.ANALYZED);
Field fielddesc = new Field("desc",p.getDesc(),Store.YES,Index.ANALYZED);
//创建document对象,用于保存field
Document document = new Document();
document.add(fieldId);
document.add(fieldName);
document.add(fielddesc);
//创建检录内容和检索目录的保存位置
Directory directory = FSDirectory.open(new File("./indexDir"));
//创建检索器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46, analyzer);
//创建一个IndexWriter,把检录内容和检索目录保存到指定的位置(directory)
IndexWriter writer = new IndexWriter(directory, config);
writer.addDocument(document);
writer.close();
}
/*
* 创建搜索
* */
@Test
public void search() throws Exception{
//指定文件搜索的位置
Directory directory = FSDirectory.open(new File("./indexDir"));
IndexReader indexReader = IndexReader.open(directory);
//创建一个搜索器
IndexSearcher searcher = new IndexSearcher(indexReader);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
//指定要搜索的field的名称
QueryParser queryparser = new QueryParser(Version.LUCENE_46,"name",analyzer);
//搜索的关键字
Query query = queryparser.parse("jia");
//搜索出的内容,前1条记录
TopDocs topdocs = searcher.search(query, 1);
//搜索的总记录条数
int conut = topdocs.totalHits;
//搜索的总条数,其中是一个数组scoredoc
ScoreDoc[] scoredocs = topdocs.scoreDocs;
List<Person> list = new ArrayList<Person>();
for (ScoreDoc scoredoc : scoredocs) {
//每一个条数的角标
int index = scoredoc.doc;
//通过角标找到搜索的document
Document document = searcher.doc(index);
//保存person对象
Person person = new Person();
person.setId(Integer.parseInt(document.get("id")));
person.setName(document.get("name"));
person.setDesc(document.get("desc"));
list.add(person);
}
for (Person person : list) {
System.out.println(person.getId());
System.out.println(person.getName());
System.out.println(person.getDesc());
}
}
}
分享到:
相关推荐
《全面解析Lucene 4.6:核心概念与应用实践》 Lucene 4.6是Apache Lucene项目的一个重要版本,它是一个高性能、全文本搜索引擎库,为开发者提供了强大的文本检索功能。在这个版本中,Lucene进行了诸多优化和改进,...
《深入理解Lucene 4.6:索引构建、查询执行与近实时搜索》 Lucene是一个开源全文搜索引擎库,广泛应用于各种信息检索系统。在本文中,我们将深入探讨Lucene 4.6版本,包括如何创建索引、执行查询以及实现近实时搜索...
《深入理解Lucene 4.6:搜索引擎框架详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了完整的搜索功能,包括索引、搜索、高亮显示结果等,广泛应用于各种信息检索系统。本文将重点探讨...
18.lucene4.6索引的相关操作 19.lucene4.6的各种Query(1) 20.lucene4.6的各种Query(2) 21.lucene4.6的各种Query(3) 22.solr4.6的快速搭建 23.solr4.6索引的相关操作 24.solr4.6搜索的相关参数功能(1) 25.solr4.6搜索...
《Lucene4.6实战应用》一书主要探讨了Apache Lucene 4.6版本在实际项目中的应用和深入理解。Lucene是一个高性能、全文检索库,它为开发者提供了强大的文本搜索功能。作为开源项目,Lucene被广泛应用于各种信息检索...
《深入理解Lucene 4.6:实例解析与实践指南》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。它为开发者提供了在Java应用中实现全文索引和搜索的能力,广泛应用于各类信息检索系统。本文将重点...
对于抓取的数据,进行去重,去标签,然后利用lucene 和 solr 进行索引和搜索。 课程的最大特点是内容新颖全面而又通俗易懂。对于实际搜索引擎所涉及的各种核心技术都有全面细致的介绍,除了作为搜索系统核心的网络...
Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后...
在"lucene(HelloWord)"这个例子中,我们将创建一个简单的索引并执行查询。首先,我们需要添加相关的依赖库,例如,在Java环境中,可以将`lib`目录下的Lucene库加入到项目中。这里,我们假设你已经准备好了Lucene的...
《Apache Lucene 4.6源代码解析》 Apache Lucene 是一个开源的全文检索库,由Java编写,为开发者提供了强大的文本搜索功能。在深入理解Lucene 4.6的源代码之前,我们首先需要了解全文搜索引擎的基本原理。全文搜索...
Lucene4.6版本,适用于Lucene的所有研究,以及中文分词功能
在描述中提到,这个 demo 使用的是 Lucene 4.6 版本。Lucene 的每个新版本通常会引入新的特性和改进,同时可能也会有向后不兼容的更改。例如,从 4.6 升级到 5.0 可能需要调整代码,以适应新的 API 或者功能。在使用...
在本篇文章中,我们将深入探讨如何在Lucene 4.6中实现自定义查询评分规则。此技术允许用户根据特定需求调整文档的相关性评分,从而更精确地满足搜索需求。 ### Lucene 4.6 自定义查询评分规则 #### 一、背景与概述...
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...