Lucene】的更多相关文章

部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本转换为lucence的Docment Docment 为若干个带值得域 b.文档分析:利用分词器对文档进行分析: c.建立索引:根据文档分析的结构建立索引文件: 2)搜索组件 a.建立查询:即将用户请求转换为搜索引擎支持的查询对象格式: b.执行搜索查询:并反馈Document结果集: 2.官方样例代码分析…
采用lucene对mysql中的表建索引,并替代全文检索操作. 备注:代码临时梳理很粗糙,后续修改. import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date; import org.apac…
首先,需要学习Lucene的评分计算公式—— 分值计算方式为查询语句q中每个项t与文档d的匹配分值之和,当然还有权重的因素.其中每一项的意思如下表所示: 表3.5 评分公式中的因子 评分因子 描 述 tf(t in d) 项频率因子——文档(d)中出现项(t)的频率 idf(t) 项在倒排文档中出现的频率:它被用来衡量项的“唯一”性.出现频率较高的term具有较低的idf,出现较少的term具有较高的idf boost(t.field in d) 域和文档的加权,在索引期间设置.你可以用该方法…
Lucene 源码剖析 1 目录 2 Lucene是什么 2.1.1 强大特性 2.1.2 API组成- 2.1.3 Hello World! 2.1.4 Lucene roadmap 3 索引文件结构 3.1 索引数据术语和约定 - 3.1.1 术语定义 3.1.2 倒排索引(inverted indexing) 3.1.3 Fields的种类 3.1.4 片断(segments) 3.1.5 文档编号(document numbers) 3.1.6 索引结构概述 3.1.7 索引文件中定义的…
第一.按词条搜索 - TermQuery query = new TermQuery(new Term("name","word1"));hits = searcher.search(query); 这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了. 第二."与或"搜索 - BooleanQuery 它实际是一个组合 query 看看下面的代码: query1 = new TermQuery(new Term(&q…
在Lucene 中 BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or. 下面给出个例子 ** * 根据信息分类和关键词进行查询 * @param type,资源的类型,其值为news或product * @param searchKey,搜索的关键字 * @return Hits */ publi…
先介绍下查询与过滤的区别和联系,其实查询(各种Query)和过滤(各种Filter)之间非常相似,可以这样说只要用Query能完成的事,用过滤也都可以完成,它们之间可以相互转换,最大的区别就是使用过滤返回的结果集不带评分操作,而使用Query返回的结果都是带相关性评分的,所以当我们如果有一些跟评分操作没有关系的业务,优先使用Filter操作,将会获取更好的性能,其实这也是Solr里面的q参数跟fq参数的区别. 下面,开始进入正题,在这之前,散仙还是喜欢老生常谈的先来了解一下Lucene里面有关于…
首先IntelliJ IDEA中搭建Maven项目(web):spring+SpringMVC+Lucene+IKAnalyzer spring+SpringMVC搭建项目可以参考我的博客 整合Lucene 4.9.0 pom.xml添加lucene依赖 properties标签添加<lucene.version>4.9.0</lucene.version> dependencies添加: <!-- lucene start --> <dependency>…
介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/2006/07/07/57122.html 本帖主要贴几个关于lucene的工具类. 索引建立 package com.lpm.fanger.search.base; import java.io.File; import java.io.IOException; import java.text.…
MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过一篇<Solr与MySQL查询性能对比>,只是简单的对比了下查询性能,对于内部原理却没有解释,本文简单分析下两者的索引区别. MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. M…
1.简介 关于空间数据搜索,以前写过<使用Solr进行空间搜索>这篇文章,是基于Solr的GIS数据的索引和检索. Solr和ElasticSearch这两者都是基于Lucene实现的,两者都可以进行空间搜索(Spatial Search),在有些场景,我们需要把Lucene嵌入到已有的系统提供数据索引和检索的功能,这篇文章介绍下用Lucene如何索引带有经纬度的POI信息并进行检索. 2.环境数据 Lucene版本:5.3.1 POI数据库:Base_Station测试数据,每条数据主要是I…
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也不用打马赛克了,都是网络分享的开源资料,当然也不涉及任何利益关系. 如若转载,还请注明出处--xingoo 讲解之前,先来分享一些资料 首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等.这里就贡献一个讲解很到位的ppt.已经被我转成了PDF,便于搜藏…
一.首先介绍lucene涉及到的排序过程 1.1.如何自定义排序对象 你可以自定义collector对象: 亦可以自定义comparator对象: 可以自定义scoredoc对象,决定如何处理结果集合: 1.2.这几种自定义之间有何区别? 自定义collector和comparator有什么区别呢???????? Besides building your own Collector to customize how the results are stored and sorted, anot…
前言:最近翻开了之前老杨(杨中科)的Lucene.Net站内搜索项目的教学视频,于是作为老杨脑残粉的我又跟着复习了一遍,学习途中做了一些笔记也就成了接下来您看到的这篇博文,仅仅是我的个人笔记,大神请呵呵一笑而过.相信做过站内搜索的.Net程序员应该对Lucene.Net不陌生,没做过的也许会问:就不是个查询嘛!为什么不能使用Like模糊查找呢?原因很简单:模糊查询的契合度太低,匹配关键字之间不能含有其他内容.最重要的是它会造成数据库全表扫描,效率低下,即使使用视图,也会造成数据库服务器"亚历山大…
前言:上一篇我们学习了Lucene.Net的基本概念.分词以及实现了一个最简单的搜索引擎,这一篇我们开始开发一个初具规模的站内搜索项目,通过开发站内搜索模块,我们可以方便地在项目中集成站内搜索功能.本次示例Demo麻雀虽小,五脏俱全,值得学习. 一.项目初窥 1.1 项目背景 本项目模拟一个BBS论坛的文章内容管理系统,当用户发帖之后首先将内容存到数据库,然后对内容进行分词后存入索引库.因此,当用户在论坛站内搜索模块进行搜索时,会直接从索引库中进行匹配并获取查询结果.站内搜索界面的效果如下图所示…
首先声明:我对Lucene.Net并不熟悉,但搜索确实是分词的一个重要应用,所以这里还是尝试将两者集成起来,也许对你有一参考. 看到了两个中文分词与Lucene.Net的集成项目:Lucene.Net.Analysis.PanGu和Lucene.Net.Analysis.MMSeg,参考其中的代码实现了最简单的集成:jiebaForLuceneNet.下面给出简单的介绍. 1.JiebaTokenizer 主要的集成点是自定义一个Tokenizer的子类,此时必须要实现它的抽象方法Increme…
域缓存,加载所有文档中某个特定域的值到内存,便于随机存取该域值. 用途及使用场景 当用户需要访问各文档中某个域的值时,IndexSearcher.doc(docId)获得Document的所有域值,但访问速度比较慢,而且只能获得Stored域的值. FieldCache能获得域值数组,根据docId random access域值.FieldCache是高级内部API,通常用户不会直接使用,Lucene的域值排序.过滤等功能会在内部使用域缓存. 原理 域缓存构造过程: un-invert倒排索引…
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前跟信息采集相关的一个项目提出了这样的一个需求:中国银行等一些部门和政府关系较好,需要在兴趣点搜索时优先显示他们. 我们的兴趣点查询是使用的Lucene进行分词查询的,这涉及到我们要对我们搜索出来的结果进行一次优先级排序.这里,我和大家一起探讨解决此问题的两种方案. 2.字典创立时对字典文档设置优先级 2.1.通过Document的setBoost来建立文…
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 兴趣点查询是指:输入框中输入地名.人名等查询信息后,地图上可以展示出对应信息所在的地址,并且根据需求以不同方式展示出相关地址的属性信息等. 以百度地图为例: 2.原理 所谓兴趣点查询,也就是前台输入描述信息后,后台根据该描述信息在地理数据库中查询到符合查询信息的地理数据和与此对应的属性数据,然后将数据返回给前台,前台进行展示.具体流程图如下: 3.数据采集…
引言 在分析同事开发的客户端搜索项目时注意到,搜索的关键是索引,而提到索引就不得不提Lucene.net,思路就是将需要搜索内容写入索引,客户端自己或局域网其他机器搜索时直接搜索索引,从而查看到你共享的信息. 初探Lucene.net时关注了几个关键类: a):IndexReader 索引读取. b):IndexWriter  创建索引. c):StandardAnalyzer 分词解析,这个应用就比较多了,他解析英文和中文时会拆成单个的字母或者汉字,如果使用PanGuAnalyzer[盘古分析…
一:简单的示例 1.1:生成索引 1.1.1:Field.Store和Field.Index 1.1.2:为数字生成索引 1.1.3:为索引加权 1.1.4:为日期生成索引 1.2:查询 1.2.1:介绍IndexReader 1.3:删除 1.3.1:还原删除的文档 1.3.2:清空回收站时面的数据 1.4:更新 前言:本教程用于Lucene3.5,Maven地址为 <dependency> <groupId>org.apache.lucene</groupId> &…
Hadoop概述 Apache lucene: 全球第一个开源的全文检索引擎工具包 完整的查询引擎和搜索引擎 部分文本分析引擎 开发人员在此基础建立完整的全文检索引擎 以下为转载:http://www.cnblogs.com/xing901022/p/3933675.htm       首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等.这里就贡献一个讲解很到位的ppt.已经被我转成了PDF,便于搜藏. 其次,关于第一次编程初探,建议还是查看官方资…
1.目录 (1) Apache Lucene(全文检索引擎)—创建索引:http://www.cnblogs.com/hanyinglong/p/5387816.html (2) Apache Lucene(全文检索引擎)—搜索:http://www.cnblogs.com/hanyinglong/p/5391269.html (3) Apache Lucene(全文检索引擎)—分词器:http://www.cnblogs.com/hanyinglong/p/5395600.html (4) E…
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://github.com/kencery/Lucene_Compass(项目内部有很详细的注释) 1.分词器的作用 a. 在创建索引的时候需要用到分词器,在使用字符串搜索的时候也会用到分词器,并且这两个地方要使用同一个分词器,否则可能会搜索不出来结果. b. 分词器(Analyzer)的作用是把一段文本中的词按…
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://github.com/kencery/Lucene_Compass(项目内部有很详细的注释) 1. 搜索思路 a. 当用户在搜索的时候,先在词汇表中查找,得到符合条件的文档编号列表,再根据文档编号去索引库中得到数据(Document). b. Lucene实现搜索的思路 b.1 首先把需要查询的字符串转换为…
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://github.com/kencery/Lucene_Compass(项目内部有很详细的注释) 1. 发生在我们身边的搜索? a. 当我们去淘宝或者京东买东西的时候经常会用到搜索功能,而他们海量的数据都是存储在数据库的,那么程序猿在实现这个搜索功能的时候,是如何实现的呢?使用数据库的like这时候就变得捉襟见…
package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.math.NumberUtils; import org.apache.lucene.document.Document; import or…
在Lucene4.4中,想要实现搜索结果按照时间倒序的效果:如果两个文档得分相同,那么就按照发布时间倒序排列:否则就按照分数排列.这种效果在Lucene4.6中实现起来极其简单,直接利用search接口的Sort参数即可达成,完全不需要像某些人说的重写Similarity那么麻烦.三两行代码的事情,体现了Make it simple, stupid的精髓. 首先来看看测试例子,这个例子中我建立了四个文档,按照内容-发布日期来表示分别是: 2004年光棍节攻略 , 20041111 2005年光棍…
Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter 这里的三个示例都是使用Highlighter: 示例代码: package com.tan.code; import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.a…
 最近在做搜索,抽空看一下lucene,资料挺多的,不过大部分都是3.x了--在对着官方文档大概看一下. 优化后的lucene索引文件(4.9.0) 一.段文件 1.段文件:segments_5p和segments.gen. segments.gen保存当前段文件版本信息. segments.gen: GenHeader, Generation, Generation, Footer segments_N(segments_5p)保存最新的段的信息,包括段的个数,每个段的段名.文档数等信息. s…