全文索引

lucene实现初级搜索引擎

偶尔善良 提交于 2020-02-14 00:00:34
一、系统设计 搜索引擎项目代码主要分为三个部分,第一部分是构建索引,全文检索;第二部分是输入问题,对问题进行分词、提取关键词、关键词扩展;第三部分是将搜索结果输出到GUI图形用户界面。 二、搜索引擎 搜索引擎的工作流程可以简化归结为以下四个步骤: (1)网上抓取网页 (2)建立索引数据库 (3)在索引数据库中搜索 (4)对搜索结果进行处理和排序 三、全文检索 1. 什么是全文检索? 全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法。 2. 全文检索流程 全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。 ①索引创建:从结构化和非结构化数据提取信息,创建索引的过程。 ②搜索索引:得到用户的查询请求,搜索创建的索引,然后返回结果。 四、利用 Lucene 实现索引和搜索 1. 简介 Lucene是一个高性能,易于扩展的IR(Information Retrieval)Java类库,可以利用其中的Java类轻松地在应用程序中增加索引和搜索功能。Lucene完全用Java实现,具有良好的跨平台性,是Apache Jakarta项目中一个子项目。 2.lucene 架构图 Lucene的架构图如下图4.1所示: 图4.1Lucene的架构图 3. Lucene 的核心类 Lucene的核心的索引类简介如下: ① IndexWriter 类

Apache Lucene

早过忘川 提交于 2020-02-13 23:59:30
Apache Lucene PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语。那小博猪就简单介绍一下这一周的学习历程, 仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也不用打马赛克了,都是网络分享的开源资料,当然也不涉及任何利益关系。   Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个 开放源代码 的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分 文本分析 引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene 是一套用于 全文检索 和搜寻的开源程式库,由 Apache 软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费 开源 工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与 搜索引擎 相混淆。 讲解之前,先来分享一些资料    首先呢,学习任何一门新的亦或是旧的开源技术

Lucene中文分词实现方法:基于StopWord分割分词

删除回忆录丶 提交于 2020-02-13 23:57:22
Lucene应用越来越多,在对中文对索引过程中,中文分词问题也就越来越重要。 在已有的分词模式中,目前比较常用的也是比较通用的有一元分词、二元分词和基于词库的分词三种。一元分词在Java版本上由yysun实现,并且已经收录到Apache。其实现方式比较简单,即将每一个汉字作为一个Token,例如:“这是中文字”,在经过一元分词模式分词后的结果为五个Token:这、是、中、文、字。而二元分词,则将两个相连的汉字作为一个Token划分,例如:“这是中文字”,运用二元分词模式分词后,得到的结果为:这是、是中、中文、文字。 一元分词和二元分词实现原理比较简单,基本支持所有东方语言。但二者的缺陷也比较明显。一元分词单纯的考虑了中文的文字而没有考虑到中文的词性,例如在上述的例子中,“中文”、“文字”这两个十分明显的中文词语就没有被识别出来。相反,二元分词则分出了太多的冗余的中文词,如上所述,“这是”、“是中”毫无意义的文字组合竟被划分为一个词语,而同样的缺陷,命中的词语也不十分准确,如上:在“这是中文字”中,“中文字”这个词语应该优先考虑的。而二元分词也未能实现。 基于词库的分词实现难度比较大,其模式也有多种,如微软在自己的软件中的汉语分词、海量的中文分词研究版,还有目前在.Net下实现的使用率较高的猎兔,和一些其他人自发实现的分词工具等等。其都有自己的分析体系,虽然分析精度高,但实现难度大

基于 Lucene 的桌面文件搜索

可紊 提交于 2020-02-13 23:57:04
开源2010年,自己在学习 Lucene 时开发的一款桌面文件搜索工具,这么多年过去了,代码一直静静存放在自己的硬盘上,与其让其沉睡,不如分享出来。 这款工具带有明显的模仿 Everything 的痕迹。事实上这是当时某项课程的作业,而那个时候刚好发现了 Eveything 这款神奇的工具,出于想探究其原理,就着手做了一款与其类似的工具,但是最后的结果却是令人不满意的,因为差距仍然是很大。 就比如 Everything 能够实时监测 NTFS 文件的变化(据说是监测 NTFS 的日志)并自动更新索引,而我却需要手动来更新。 虽然这不是一款另我十分满意的作品,但希望其中某些部分能够帮到有需要的人。这里还要感谢共同完成的 杨一 和 江边串串香 。 代码开源在 Github 上,地址在 这里 。 为什么选择 Lucene? Lucene 是最著名的全文检索引擎的核心库,使用 Lucene 可以让搜索出来的结果按匹配程度排序。 Lucene 有很多版本的实现,Java,C#,Python。 用数据库的模糊搜索也可以实现,但是效果和速度跟 Lucene 还是有差距。 关于 Lucene 的一些资料可以参考 车东的笔记 。 功能 实现对桌面文件名、MP3 文件 Tag 信息(歌手,专辑,流派,...)的快速检索。 前提:需要先对文件建立索引。 分词 默认情况下使用中文的分词是对词进行切分,比如

Lucene7.2.1系列(一)快速入门

烈酒焚心 提交于 2020-02-13 23:56:54
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 Lucene是什么? Lucene 在维基百科的定义 Lucene是一套用于 全文检索和搜索 的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论, Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库 。 另外,Lucene不提供爬虫功能,如果需要获取内容需要自己建立爬虫应用。 Lucene只做索引和搜索工作。 Lucene 官网 http://lucene.apache.org/ 打开Luncene官网你会发现Lucene版本更新的太快了,现在最新的版本已经是7.2.1。不过这也变相说明了Luncene这个开源库的火爆。 Lucene 和 solr 我想提到Lucene,不得不提solr了。 很多刚接触Lucene和Solr的人都会问这个明显的问题: 我应该使用Lucene还是Solr? 答案很简单:如果你问自己这个问题,在99%的情况下,你想使用的是Solr. 形象的来说Solr和Lucene之间关系的方式是汽车及其引擎。 你不能驾驶一台发动机,但可以开一辆汽车。 同样,

学习笔记(二)--Lucene简介

…衆ロ難τιáo~ 提交于 2020-02-13 23:56:15
Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 是Apache的子项目,网址:http://lucene.apache.org/ Lucene用途 为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene适用场景 在应用中为数据库中的数据提供全文检索实现。 开发独立的搜索引擎服务、系统 Lucene的特性 稳定、索引性能高 每小时能够索引150GB以上的数据。 对内存的要求小——只需要1MB的堆内存 增量索引和批量索引一样快。 索引的大小约为索引文本大小的20%~30%。 高效、准确、高性能的搜索算法 良好的搜索排序。 强大的查询方式支持:短语查询、通配符查询、临近查询、范围查询等。 支持字段搜索(如标题、作者、内容)。 可根据任意字段排序 支持多个索引查询结果合并 支持更新操作和查询操作同时进行 支持高亮、join、分组结果功能 速度快 可扩展排序模块,内置包含向量空间模型、BM25模型可选 可配置存储引擎 跨平台 纯java编写。 作为Apache开源许可下的开源项目

Lucene介绍

冷暖自知 提交于 2020-02-13 23:55:39
学习目标: 明白lucene是什么,用途、特性 明白lucene的使用场景 理解lucene的架构 会集成lucene到应用中 Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。 提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 是Apache的子项目,网址: http://lucene.apache.org/ Lucene用途 为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene适用场景 在应用中为数据库中的数据提供全文检索实现。 开发独立的搜索引擎服务、系统 Lucene特性 1、稳定、索引性能高 每小时能够索引150GB以上的数据。 对内存的要求小——只需要1MB的堆内存 增量索引和批量索引一样快。 索引的大小约为索引文本大小的20%~30%。 2、高效、准确、高性能的搜索算法 良好的搜索排序。 强大的查询方式支持:短语查询、通配符查询、临近查询、范围查询等。 支持字段搜索(如标题、作者、内容)。 可根据任意字段排序 支持多个索引查询结果合并 支持更新操作和查询操作同时进行 支持高亮、join、分组结果功能 速度快

Lucene简单介绍

百般思念 提交于 2020-02-13 23:54:46
【2016.6.11】以前写的笔记,拿出来放到博客里面~ 相关软件: Solr, IK Analyzer, Luke, Nutch;Tomcat; 1.是什么: Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包; 为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文 检索引擎; 2.主要应用: 对句子进行分词,从而实现自然语言分词后提取关键词并且进行拓展,再送入搜索引擎进行查询,提高精准度; 对数据库中的文档简历索引,实现快速的查找; 3.环境: 用java开发,很方便调用jar包; 4.具体类: org.apache.lucene.analysis;语言分析器,主要用于分词; 5.相关的开源类库: IK Analyzer 6.Lucene的开源企业搜索平台: Solr: Solr是用Java编写、运行在Servlet容器(如Apache Tomcat或Jetty)的一个独立的全文搜索服务器; Solr是高度可扩展的,并提供了分布式搜索和索引复制; 7.Nutch: 是一个开源的java实现的web 爬虫; 主要用于收集网页数据然后进行分析,建立索引等,底层使用Hadoop进行分布式计算与存储,索引使用Solr分布式索引框架; 依赖Hadoop的数据结构,适合批处理

Lucene第一篇【介绍Lucene、快速入门】

落爺英雄遲暮 提交于 2020-02-13 23:53:56
什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个 全文检索引擎的架构 ,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。 Lucene是根据关健字来搜索的文本搜索工具,只能在某个网站内部搜索文本内容,不能跨网站搜索 既然谈到了网站内部的搜索,那么我们就谈谈我们熟悉的百度、google那些搜索引擎又是基于什么搜索的呢…. 从图上已经看得很清楚, baidu、google等搜索引擎其实是通过网络爬虫的程序来进行搜索的 … 为什么我们要用Lucene? 在介绍Lucene的时候,我们已经说了:Lucene又不是搜索引擎,仅仅是在 网站内部 进行 文本 的搜索。那我们为什么要学他呢??? 我们之前编写纳税服务系统的时候,其实就已经 使用过SQL来进行站内的搜索 .. 既然SQL能做的功能,我们还要学Lucene,为什么呢??? 我们来看看我们用SQL来搜索的话,有什么缺点: (1)SQL只能针对数据库表搜索, 不能直接针对硬盘上的文本搜索

lucene 学习之基础篇

纵饮孤独 提交于 2020-02-13 23:53:08
一、什么是全文索引 全文检索首先将要查询的目标文档中的词提取出来,组册索引(类似书的目录),通过查询索引达到搜索目标文档的目的,这种先建立索引,再对索引进行搜索的过程就叫全文索引。 从图可以看出做全文搜索的步骤: 1、对目标数据源中提取相应的词建立索引 2、通过检索索引(检索索引中的词),从而找到目标文件即源数据。 现在的全文检索不仅能对字符串进行匹配,而是已经发展到可以对大文本、语言、图像、活动影像等非结构化数据进行综合管理的发、大型软件。 二、lucene 百度百科 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个 开放源代码 的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分 文本分析 引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene 是一套用于 全文检索 和搜寻的开源程式库,由 Apache 软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费 开源 工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库