关闭

Lucene:全文检索工具

标签: lucene全文检索
335人阅读 评论(0) 收藏 举报
分类:

Lucene

什么是lucene

Luceneapache旗下的顶级项目,是一个全文检索工具包

Lucene就是一个可以创建全文检索引擎系统的一堆jar.可以使用它来构建全文检索引擎系统,但是它不能独立运

全文检索引擎系统

放在tomcat下可以独立运行,对外提供全文检索服务.

数据的分类

结构化数据:有固定类型或者有固定长度的数据

例如:数据库中的数据(mysql,oracle), 元数据(就是windows中的数据)

结构化数据搜索方法:

数据库中数据通过sql语句可以搜索

元数据(windows中的)通过windows提供的搜索栏进行搜索

非结构化数据:没有固定类型和固定长度的数据

例如: world文档中的数据, 邮件中的数据

非结构化数据搜索方法:

Word文档使用ctrl+F来搜索

顺序扫描法:

Ctrl+F中是使用的顺序扫描法,拿到搜索的关键字,去文档中,逐字匹配,直到找到和关键字一致的内容为止.

优点: 如果文档中存在要找的关键字就一定能找到想要的内容

缺点: , 效率低

全文检索算法(倒排索引算法):

将文件中的内容提取出来, 将文字拆封成一个一个的词(分词), 将这些词组成索引(字典中的目录), 搜索的时候先搜索索引,通过索引找文档,这个过程就叫做全文检索.

分词: 去掉停用词(a, an, the ,, , , , ,呵呵),因为搜索的时候搜索这些词没有意义,将句子拆分成词,去掉标点符号和空格

优点: 搜索速度快

缺点: 因为创建的索引需要占用磁盘空间,所以这个算法会使用掉更多的磁盘空间,这是用空间换时间

原理:

相当于字典,分为目录和正文两部分,查询的时候通过先查目录,然后通过目录上标注的页数去正文页查找需要的内容

Lucene应用领域

1. 互联网全文检索引擎(比如百度,  谷歌,  必应)

2. 站内全文检索引擎(淘宝, 京东搜索功能)

3. 优化数据库查询(因为数据库中使用like关键字是全表扫描也就是顺序扫描算法,查询慢)

Lucene下载

官方网站:http://lucene.apache.org/ 

版本:lucene4.10.3

Jdk要求:1.7以上

IDEEclipse

Lucene结构

索引:

域名:词  这样的形式,

它里面有指针执行这个词来源的文档

索引库: 放索引的文件夹(这个文件夹可以自己随意创建,在里面放索引就是索引库)

Term词元: 就是一个词, lucene中词的最小单位

文档:

Document对象,一个Document中可以有多个Field域对象,Field域对象中是key   value键值对的形式:有域名和域值,

一个document就是数据库表中的一条记录, 一个Filed域对象就是数据库表中的一行一列

这是一个通用的存储结构.

创建索引和所有时所用的分词器必须一致

域的详细介绍

是否分词:

分词的作用是为了索引

需要分词: 文件名称, 文件内容

不需要分词: 不需要索引的域不需要分词,还有就是分词后无意义的域不需要分词

  比如: id, 身份证号


是否索引:

索引的的目的是为了搜索.

需要搜索的域就一定要创建索引,只有创建了索引才能被搜索出来

不需要搜索的域可以不创建索引

需要索引: 文件名称, 文件内容, id, 身份证号等

不需要索引: 比如图片地址不需要创建索引, e:\\xxx.jpg

因为根据图片地址搜索无意义

 

是否存储:

存储的目的是为了显示.

是否存储看个人需要,存储就是将内容放入Document文档对象中保存出来,会额外占用磁盘空间, 如果搜索的时候需要马上显示出来可以放入document中也就是要存储,这样查询显示速度快, 如果不是马上立刻需要显示出来,则不需要存储,因为额外占用磁盘空间不划算.

 

域的各种类型

 

Field

数据类型

Analyzed

是否分析

Indexed

是否索引

Stored

是否存储

说明

StringField(FieldName, FieldValue,Store.YES))

字符串

N

Y

YN

这个Field用来构建一个字符串Field,但是不会进行分析,会将整个串存储在索引中,比如(订单号,姓名等)

是否存储在文档中用Store.YESStore.NO决定

LongField(FieldName, FieldValue,Store.YES)

Long

Y

Y

YN

这个Field用来构建一个Long数字型Field,进行分析和索引,比如(价格)

是否存储在文档中用Store.YESStore.NO决定

StoredField(FieldName, FieldValue) 

重载方法,支持多种类型

N

N

Y

这个Field用来构建不同类型Field

不分析,不索引,但要Field存储在文档中

TextField(FieldName, FieldValue, Store.NO)

TextField(FieldName, reader)

 

字符串

Y

Y

YN

如果是一个Reader, lucene猜测内容比较多,会采用Unstored的策略.

 

注意:lucene底层的算法,钱数是要分词的,因为要根据价钱进行对比

例如: 大于12.5元的小于100元的商品搜索出来

 

文档的更新

更新就是按照传入的Term进行搜索,如果找到结果那么删除,将更新的内容重新生成一个Document对象

如果没有搜索到结果,那么将更新的内容直接添加一个新的Document对象

 

文档的删除

可以根据某个域的内容进行删除

还可以一次删除所有

 

搜索

TermQuery:

根据词进行搜索(只能从文本中进行搜索)

QueryParser:

根据域名进行搜索,可以设置默认搜索域,推荐使用. (只能从文本中进行搜索)

NumericRangeQuery:

从数值范围进行搜索

BooleanQuery:

组合查询,可以设置组合条件,not and or.从多个域中进行查询

must相当于and关键字,是并且的意思

should,相当于or关键字或者的意思

must_not相当于not关键字, 非的意思

注意:单独使用must_not  或者 独自使用must_not没有任何意义

MatchAllDocsQuery:

查询出所有文档

MultiFieldQueryParser:

可以从多个域中进行查询,只有这些域中有关键词的存在就查询出来.

1
0
查看评论

Lucene全文检索引擎工具包使用方法总结

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的...
  • csdnshenzhen
  • csdnshenzhen
  • 2017-06-20 09:41
  • 898

Apache Lucene 全文检索详解及开发示例

文章地址:http://www.cnblogs.com/xing901022/p/3933675.html 讲解之前,先来分享一些资料     首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等。这里就贡献一个讲解很到位的ppt。已经被我转...
  • boonya
  • boonya
  • 2016-04-05 13:44
  • 1918

全文检索Lucene和Solr简介

在电商项目中,经常会遇到的是海量数据的查询。如果在海量数据中进行查询的话,使用sql语句进行查询的话,效率非常的低。        使用Lucene和Solr就是为了解决这种问题的。首先,Lucene是干什么用的?Solr又是干什么用的?   &...
  • zc474235918
  • zc474235918
  • 2016-04-25 19:49
  • 1323

全文检索工具lucene、solr的区别以及MongoDB的全文检索

1、Lucene是一个开放源代码的全文检索引擎工具包简介。 2、Solr简介 3、Lucene与Solr的区别 4、MongoDB的全文检索,以及全文检索中的中文支持情况说明
  • ytangdigl
  • ytangdigl
  • 2017-09-10 09:55
  • 670

lucene全文检索基础

信息检索整体流程 一次完整的搜索从用户输入要查询的关键词开始,比如想查找lucene的相关学习资料,我们都会Google或百度中输入关键词,比如输入“lucene, 全文检索框架”,之后系统根据用户输入的关键词返回相关信息。一次检索大致可分为四步:
  • napoay
  • napoay
  • 2015-12-15 00:28
  • 1802

全文检索之lucene入门篇HelloWorld

首先,先看下目录结构。        第一步,在eclipse中建立jave项目。需要引入jar包,只有3个,分别是lucene的分词器和核心包,还有高亮显示器。做法是建立一个lib文件夹,将jar包拷过来,然后右击,选择Build Path(构建路径)...
  • liuyanlinglanq
  • liuyanlinglanq
  • 2014-12-31 12:04
  • 3926

【Lucene】Apache Lucene全文检索引擎架构之入门实战

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。——...
  • eson_15
  • eson_15
  • 2016-07-07 19:23
  • 8471

全文检索引擎Lucene优点

Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的免费、开源Java产品加入到Apache软件基金会的Jakarta家族中。Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。它也是一个高性能、可伸缩的信息搜索...
  • yingsuixindong
  • yingsuixindong
  • 2010-05-12 08:34
  • 5422

lucene学习六:lucene全文检索与数据库查询的比较

关于lucene的具体概念和使用,本文不做具体的概述,具体通过一下三点探讨一下lucene全文检索与数据库查询的一些区别 1:性能上 数据库:比如我要查找某个商品,根据商品名,比如select * from product where doctname like %keywords%,这样查询的话...
  • pangliang_csdn
  • pangliang_csdn
  • 2016-06-23 10:31
  • 2300

lucene全文检索初体验-lucene demo演示

最近在研究全文检索,看到lucene这个项目很不错。于是拿来把玩。今天成功体验了下检索。拿出来与大家分享下: lucene项目官网:http://lucene.apache.org/ lucene版本:lucene-3.0.3.zip最新版本已经到3.5了,但是最新版本里没有我们此次...
  • sushengmiyan
  • sushengmiyan
  • 2012-04-07 21:11
  • 8631
    个人资料
    • 访问:75202次
    • 积分:1464
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:3篇
    • 译文:5篇
    • 评论:15条
    欢迎关注


    博客专栏
    技术交流和分享
    工作邮箱:humf@vip.qq.com
    技术分享和交流QQ群:432135803
    微信公众号
    微信公众号
    分享到: 微信 更多
    2