Lucene系列-分析器】的更多相关文章

分析器介绍 搜索的基础是对文本信息进行分析,Lucene的分析工具在org.apache.lucene.analysis包中.分析器负责对文本进行分词.语言处理得到词条,建索引和搜索的时候都需要用到分析器,两者应当是同一个,否则没法很好的匹配. Lucene的分析器往往包括一个分词器(Tokenizer)和多个过滤器(TokenFilter),过滤器负责对切出来的词进行处理,如去掉敏感词.转换大小写.转换单复数等.tokenStream方法中往往是先使用一个Tokenizer,接着使用多个Tok…
为了生存,就得干一行爱一行.那就学习下lucene吧. 全文检索介绍 流程: 建索引 准备待搜索文档 文档分词:将文档分成一个个单独的单词,去除标点符号.停词(无意义的冠词介词等),得到token 语言处理:统一小写,单词缩减或转变为词根形式,得到term 索引:用term创建字典,term->doc,对字典按字母顺序排序,合并相同的term成为文档倒排链表.term->doc1,doc2,doc3 搜索 输入查询语句 处理查询语句:词法分析.语法分析.语言处理,得到语法树 搜索索引,得到符合…
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. Lucene搜索API 图示 3. Lucene搜索代码示例 先在pom.xml里面引入查询分析器模块 <!-- lucene-queryparser 查询分析器模块 --> <dependency> <groupId>org.apache.lucene</groupI…
一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId&…
一.Lucene分词器详解 1. Lucene-分词器API (1)org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理器).通过调用它的如下两个方法,得到输入文本的分词处理器. public final TokenStream tokenStream(String fieldName, Reader reader) public final TokenStream token…
什么是分析器? 分析(Analysis)在Lucene中指的是将域(Field)文本转换为最基本的索引表示单元—项(Term)的过程. 分析器(Analyzer)对分析操作进行了封装,通过执行一系列操作,将文本语汇单元化, 这些操作包括提取单词.去除标点符号.去除语汇单元上的音调符号.将大写字母转换成小写.移除常用词.将单词转换为词干(词干还原)等. 标准分析器 @Test //默认分析器 public void testTokenStream() throws IOException { //…
域缓存,加载所有文档中某个特定域的值到内存,便于随机存取该域值. 用途及使用场景 当用户需要访问各文档中某个域的值时,IndexSearcher.doc(docId)获得Document的所有域值,但访问速度比较慢,而且只能获得Stored域的值. FieldCache能获得域值数组,根据docId random access域值.FieldCache是高级内部API,通常用户不会直接使用,Lucene的域值排序.过滤等功能会在内部使用域缓存. 原理 域缓存构造过程: un-invert倒排索引…
lucene是一个java开源的高效全文检索工具包,最近做项目要用到,把学习的过程记录一下. 第一步:下载安装jdk 1.首先从官网下载jdk(下载之前先查看你的电脑是多少位操作系统,如果是32就下载32的,如果是64位就下载64位的,否则不能兼容).下载之后解压到当前文件夹,双击安装JDK的可执行文件,按步骤和提示,一直点"下一步"完成安装,这里假设安装到目标文件C:\Program Files\Java\jdk1.8.0_25: 2.JDK安装完成后,需手动配置环境变量,右键&qu…
本文介绍下lucene生成的索引有哪些文件组成,每个文件包含了什么信息.基于Lucene 4.10.0. 数据结构 索引(index)包含了存储的文档(document)正排.倒排信息,用于文本搜索.索引又分为多个段(segments),每个新添加的doc都会存到一个新segment中,不同的segments又会合并成一个segment.segment存储着具体的documents,每个doc有一系列的字段(field)组成,一个field的值是多个词(term),一个term是以一些bytes…
近实时搜索(near-real-time)可以搜索IndexWriter还未commit的内容,介于immediate和eventual之间,在数据比较大.更新较频繁的情况下使用.本文主要来介绍下如何使用,其原理还没弄透,改天再续.本文代码基于lucene 4.10 IndexReader的重建 想要看到新的结果就需要重新打开一个IndexReader,DirectoryReader提供了DirectoryReader openIfChanged(DirectoryReader oldReade…
1.facet的直观认识 facet:面.切面.方面.个人理解就是维度,在满足query的前提下,观察结果在各维度上的分布(一个维度下各子类的数目). 如jd上搜“手机”,得到4009个商品.其中品牌.网络.价格就是商品的维度(facet),点击某个品牌或者网络,获取更细分的结果. 点击品牌小米,获得小米手机的结果,显示27个. 点击移动4G,获得移动4G.小米手机,显示4个. 2.facet特性 facet counting:返回一个facet下某子类的结果数.如上面的品牌维度下小米子类中满足…
Lucene搜索的时候就要构造查询语句,本篇就介绍下各种Query.IndexSearcher是搜索主类,提供的常用查询接口有: TopDocs search(Query query, int n);//find the top n hits for query TopDocs search(Query query, Filter filter, int n);// find the top n hits for query, applying filter if no-null Query q…
一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lucene的索引API创建索引.存储. 这里重点要强调应用代码负责做什么,lucene负责做什么. 2. Lucene索引创建API 图示 通过该图介绍lucene创建索引的核心API:Document.IndexWriter Lucene中要索引的文档.数据记录以document表示,应用程序通过I…
一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎.是Apache的子项目,网址:http://lucene.apache.org/ 2. Lucene用途 为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为…
一.为什么需要搜索引擎 问题1:数据库索引的原理是怎样的? 索引原理:对列值创建排序存储,数据结构={列值.行地址}.在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据. 问题2:索引的排序,是怎么排的? 数值列 时间列 文本列 问题3:在新闻标题列上建索引,当我们查询 标题 = ‘钓鱼岛’,数据库会怎么去查? 而当我们查询 标题 LIKE ‘%钓鱼岛%’ ,数据库该如何去查? Like 时索引失效,全表扫描,数据量大时是噩梦. 问题4:在数据库中如何判断一个列是…
https://blog.csdn.net/whuqin/article/details/42524825 1.facet的直观认识 facet:面.切面.方面.个人理解就是维度,在满足query的前提下,观察结果在各维度上的分布(一个维度下各子类的数目). 如jd上搜“手机”,得到4009个商品.其中品牌.网络.价格就是商品的维度(facet),点击某个品牌或者网络,获取更细分的结果. 点击品牌小米,获得小米手机的结果,显示27个. 点击移动4G,获得移动4G.小米手机,显示4个. 2.fac…
上一篇介绍了用lucene建立索引和搜索,但是那些都只是在本机上运行的,如果希望在服务器上做成web服务该怎么办呢? 一个有效的方法就是用socket通信,这样可以实现后端与前端的独立,也就是不管前端用什么(比如PHP)都可以Lucene只提供检索功能. 简单来说,socket就是实现不同的进程之间通讯的一个通道.socket由两部分组成:服务端和客户端.有两种:单进程和多进程. 所以认识socket的阶梯大概是这样的: 1.用java本地做服务端和客户端,实现不同程序之间的单进程通讯: 2.用…
首先,new一个java project,名字叫做LuceneTools. 然后,在project里new一个class,名字叫做IndexFiles.这个类用来给文件建索引(建好索引以后就可以高效检索了). 在写代码之前,我们要先引入一下lucene包,就类似于C语言里的include.如图: 点击之后看到如下窗口,选择“Add External JARs” 然后找到C:\Lucene-6.2.1目录下(如果是按上一篇文章配置的话应该是在这个目录里)的三个包(这里我们暂时只用到这三个包)引入工…
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 一 准备 创建项目并添加Maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> &…
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 Lucene是什么? Lucene在维基百科的定义 Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具:就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库. 另…
Lucene教程 1 lucene简介1.1 什么是lucene    Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品.2 lucene的工作方式    lucene提供的服务实际包含两部分:一入一出.所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除:所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源.2.1写入流程    源字符…
1 lucene简介 1.1 什么是lucene     Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 2 lucene的工作方式     lucene提供的服务实际包含两部分:一入一出.所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除:所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源. 2.1写入流程     源字符串首先…
Lucene教程 1 lucene简介1.1 什么是lucene    Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品.2 lucene的工作方式    lucene提供的服务实际包含两部分:一入一出.所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除:所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源.2.1写入流程    源字符…
(建立索引)] )中生成的索引文件的存放地址.详细步骤简单介绍例如以下: 1.创建Directory对象,索引目录 2.创建IndexSearch对象,建立查询(參数是Directory对象) 3.创建QueryParser对象(lucene版本号,查询Field字段,所用分词器) 4.生成Query对象,由QueryParser对象的parse函数生成(參数是所查的keyword) 5.建立TopDocs对象(IndexSearch的search函数,參数是Query查询对象,) 6.TopD…
Lucene教程 1 lucene简介 1.1 什么是lucene     Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 2 lucene的工作方式     lucene提供的服务实际包含两部分:一入一出.所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除:所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源. 2.1写入流程  …
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field可以看作是数据库的字段.用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单. Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容. Lucene2.0的下载地址是http://apache.justdn.org/luce…
1.倒排索引结构 2.lucene自定义评分域 3.Lucene系列-FieldCache 4.Lucene系列-facet | IT瘾 5.lucene4.7 之排序 6.lucene排序---相关度与其他组合排序…
http://blog.csdn.net/tianlincao/article/details/6867127 Lucene教程 1 lucene简介 1.1 什么是lucene     Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 2 lucene的工作方式     lucene提供的服务实际包含两部分:一入一出.所谓入是写入,即将你提供的源(本质是字符串)写入索…
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 luke入门 简介: github地址:https://github.com/DmitryKey/luke 下载地址:https://github.com/DmitryKey/luke/releases Luke是一个用于Lucene/Solr/Elasticsearch 搜索引擎的,方便开发和诊断的 GUI(可视化)工具. 它有以下功能: 查看文档并分析其内容(…
2.信息检索 信息检索是计算机世界中非常重要的一种功能.信息检索不仅仅是指从数据库检索数据,还包括从文件.网页.邮件.用户手输入的内容中检索数据.通过怎样的高效方式将用户想要的信息快速提取出来,是计算机技术人员研究的重点方向之一. 2.1.数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件 2.2.结构化数据搜索方法 数据库就是最常见的结…