一、概述
搜索的方式:
1、只处理文本(不处理多媒体,多媒体是另外一个领域)
2、不处理语义,而是按词查询
3、对于英文,不区分大小写
Lucene(全文检索):
指以文本作为检索对象,找出含有指定词汇的文本
全面、准确和快速是衡量全文检索系统的关键指标
全文检索与数据库搜索
1、全文检索的搜索效果更加准确
2、相关排序,数据库没有(全文检索会把最符合要求的放在最前面)
3、速度更快(采用索引检索,数据库中的select不能)
应用场景:
1、系统内搜索(站内搜索)
2、垂直搜索(利用爬虫等把部分网站的信息拿过来存到自己系统中)
3、全网搜索(需要软件和硬件的配合,很好的算法等,不常用)
二、Lucene的简介
全文检索就如同一个ORM,是一个概念,ORM的框架有很多种:Hibernate、TopLink、iBatis等。同样的,全文检索领域中也有很多种框架,Lucene就是其中的一个开源的全文检索框架。
Lucene的主页为:http://lucene.apache.org/
.我现在使用的为3.0.1的版本。
三、做个小例子
1、开发环境的配置
加入jar包:
lucene-core-3.0.1.jar(核心包)
contrib\analyzers\common\lucene-analyzers-3.0.1.jar(分词器)
contrib\highlighter\lucene-highlighter-3.0.1.jar(高亮)
contrib\memory\lucene-memory-3.0.1.jar(高亮)
2、先做个实体类,用来模拟数据
package com.lucene.entity;
public class ArticleEntity {
private Integer id ;
private String title ;
private String content ;
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
开始做lucene搜索:
package com.lucene.hello;
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.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
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.testng.annotations.Test;
import com.lucene.entity.ArticleEntity;
public class HelloLucene {
@Test
public void createindex() throws Exception{
// 模拟一个存到了数据库中的文章对象
ArticleEntity article = new ArticleEntity();
article.setId(111);
article.setTitle("Hello Lucene !");
article.setContent("第一个lucene实例 ");
// 在索引库中建立索引
// 1>> 把Article转为Document
Document doc = new Document();
doc.add(new Field("id", article.getId().toString(), Store.YES, Index.NOT_ANALYZED));
doc.add(new Field("title",article.getTitle(),Store.YES,Index.ANALYZED));
doc.add(new Field("content",article.getContent(),Store.NO,Index.ANALYZED));
// 2>> 把Document添加到索引库中以建立索引
Directory d = FSDirectory.open(new File("./filepath"));
Analyzer analyzar = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter indexWrite = new IndexWriter(d, analyzar, MaxFieldLength.LIMITED);
indexWrite.addDocument(doc);
indexWrite.close();
}
@Test
public void search() throws Exception{
// 搜索条件
String queryString = "Hello" ;
// 执行搜索
// =============================================================
Directory path = FSDirectory.open(new File("./filepath"));
Analyzer a = new StandardAnalyzer(Version.LUCENE_30);
// 1>> 把查询字符串转为Query对象
QueryParser queryp = new QueryParser(Version.LUCENE_30, "title", a) ;// 默认只在title中查询
Query query = queryp.parse(queryString);
// 2>> 搜索,得到中间结果
IndexSearcher indexSearch = new IndexSearcher(path);
TopDocs topd = indexSearch.search(query, 1000);// 第1参数是查询条件,第2个参数是指定要返回前n条结果
int totalnum = topd.totalHits; //得到符合条件的总记录数
ScoreDoc[] sore = topd.scoreDocs; //返回前n条结果的信息
// >> 处理结果
List<ArticleEntity> list = new ArrayList<ArticleEntity>();
for(int i = 0 ; i < sore.length ;i++){
ScoreDoc scoreDoc = sore[i];
int id = scoreDoc.doc;//Document内部编号
float scoreNum = scoreDoc.score ;//与搜索条件符合的相关度
// 根据内部编号得到真正的Document数据
Document doc = indexSearch.doc(id);
// 把Document转为Article
ArticleEntity entity = new ArticleEntity();
entity.setId(Integer.parseInt(doc.get("id"))); //需要转型
entity.setTitle(doc.get("title"));
entity.setContent(doc.get("content"));
list.add(entity);
}
indexSearch.close();
// =============================================================
// 显示结果
for(ArticleEntity aEntity : list){
System.out.println("id:"+aEntity.getId());
System.out.println("标题:"+aEntity.getTitle());
System.out.println("内容:"+aEntity.getContent());
}
}
}
- 大小: 25.9 KB
- 大小: 26.7 KB
- 大小: 29 KB
- 大小: 18.9 KB
- 大小: 30.2 KB
分享到:
相关推荐
Lucene的基础知识 1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 6、分析器的分析过程 a) 测试分析器的分词...
**Lucene学习入门程序** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java编写,可以被集成到各种应用中,提供强大的文本检索功能。本程序是针对初学者设计的,旨在帮助开发者快速理解并...
【标题】:“Lucene学习资料收集” 【描述】:Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。这个资料集可能包含了关于如何理解和使用Lucene的各种资源,特别是通过博主huanglz19871030在iteye上的...
**Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...
"lucene学习pdf2" 提供的文档,无疑是对Lucene深入理解的一把钥匙,它涵盖了Lucene的核心概念、操作流程以及高级特性。 首先,Lucene的基础知识是必不可少的。Lucene的核心在于索引和搜索,它将非结构化的文本数据...
本文将主要围绕Java Lucene进行深入探讨,并基于提供的“Lucene学习源码.rar”文件中的“Lucene视频教程_讲解部分源码”展开讨论。 一、Lucene核心概念 1. 文档(Document):Lucene中的基本单位,用于存储待检索...
lucene学习笔记 1 .txt lucene学习笔记 2.txt lucene学习笔记 3 .txt lucene入门实战.txt Lucene 的学习 .txt Lucene-2.0学习文档 .txt Lucene入门与使用 .txt lucene性能.txt 大富翁全文索引和查询的例子...
通过对这个案例的学习,你可以掌握 Lucene 的基本操作,为进一步深入学习和应用打下基础。 在实际项目中,你可能需要考虑更多细节,如错误处理、多线程索引、优化索引性能、处理大量数据等。此外,随着 Lucene 版本...
**Lucene入门学习文档** **一、什么是Lucene** Lucene是Apache软件基金会下的一个开源全文检索库,它提供了一个高...通过阅读"Lucene学习文档",你可以一步步了解并掌握这些知识,逐步成为一个熟练的Lucene开发者。
本篇文章将围绕"Lucene-2.0学习文档"的主题,结合Indexer.java、MyScoreDocComparator.java和MySortComparatorSource.java这三个关键文件,深入探讨Lucene的核心概念和实际应用。 首先,我们来看`Indexer.java`。这...
以上就是Lucene的基础知识和使用方法,通过这个入门资料,你可以快速上手并构建自己的全文搜索引擎。在实际应用中,还可以深入学习更高级的主题,如多字段搜索、评分策略、倒排索引优化等,以满足更复杂的需求。
1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一系列的关键词(Token)。默认的StandardAnalyzer会处理英文文本,但可以自定义Analyzer来适应其他语言或特定需求。 2. **索引创建**:将分词后的...
Lucene5.2.1 入门学习例子. 这是别人的例子源码。可以参考。内有使用说明。
**标题:“Lucene-入门”** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发并维护。它是Java编写的一个开源项目,被广泛应用于构建搜索引擎或者在大型数据集上进行全文检索。Lucene提供了丰富的搜索...
**Lucene 学习笔记 1** Lucene 是一个全文搜索引擎库,由 Apache 软件基金会开发。它提供了一个可扩展的、高性能的搜索框架,使得开发者能够在其应用程序中集成高级的搜索功能。本篇学习笔记将深入探讨 Lucene 的...
**Lucene学习资料** Lucene是一个高性能、可扩展的信息检索库,由Apache软件基金会开发,是Java编程语言中广泛使用的全文检索引擎库。它提供了文本分析、索引和搜索的基本功能,同时也支持高级搜索语法和查询操作。...
**一、Lucene.net基础** Lucene.net提供了对文本数据的索引和搜索功能,它通过分词、建立倒排索引等技术,使得文本数据可以被快速检索。在.NET环境中,开发者可以通过Lucene.net API创建索引,添加、删除和更新文档...
以上就是Lucene 3.6的学习笔记,涵盖了从基础到高级的各种搜索和索引操作,以及相关的分词和扩展功能。通过学习这些内容,可以深入理解Lucene的工作机制,并利用其强大的搜索能力构建高效的应用。
1. 官方文档:Apache Lucene的官方文档详细介绍了API和使用示例,是学习的基础。 2. 代码示例:通过分析提供的"lucene4.8学习资料和案例"压缩包,可以深入了解Lucene的实践操作,如创建索引、执行查询、处理结果等。...
通过这些学习资料,读者可以系统地学习搜索引擎的理论基础,掌握Lucene的核心功能,同时也能了解到如何在实际项目中应用这些技术,提升搜索系统的性能和用户体验。这些知识对于从事信息检索、网站开发、大数据分析等...