lucene(1)lucene7.3.1 入门笔记

简介

最近项目要使用solr,solr是基于lucene开发的,而我这方面的知识还停留在lucene2.x版本的,不得不承认,不知不觉中,lucene已经7.x版本了。出于项目和个人方面的原因,打算利用点时间补充。
我使用的是lucene7.3.1版本、jdk1.8、eclipse4.7

lucene是一个全文检索的工具包。是apache下的开源项目。它使用的索引结构是倒排索引表又叫反向索引结构。
非倒排索引是在一直的文档中根据关键字逐个匹配扫描
倒排索引根据关键字匹配索引中的词,根据匹配的词找到文档。
倒排索引表包括:索引域和文档域。
文档域的作用:将数据结构化存储到索引文件中。
索引域的作用:为了搜索。

lucene 索引与like区别

数据库like方式查询时全表扫描的,数据量少这样也能忍受,如果数据量上,这种方式会很慢。
Lucene是倒排索引,使用lucene建立一个索引库,一次建立多次使用。索引对应document,检索速度很快、性能也很好。

lucene下载地址

http://archive.apache.org/dist/lucene/java/

lucene官方参考文档

http://lucene.apache.org/core/7_3_1/index.html

如何使用lucene

  1. 创建项目导入相关jar
  2. 采集数据(文档、数据库等数据)
  3. 将采集的数据统一结构化处理,创建成Document对象
  4. 使用分词器对field内容进行分词处理
  5. 使用IndexWriter创建索引
  6. 创建查询语句
  7. IndexSearcher搜索索引
  8. IndexSearcher搜索完毕返回TopDocs,Topdocs中存储了匹配相关度最高前n条记录

理解lucene中的Field

Field是文档中的域,包括Field名和Field值两部分,一个Document可以包括多个Field,Field值即为要索引的内容,也是要搜索的内容。

Field有几个概念:

  • 是否分词 :在搜索的时候,通常输入的是关键词,这个是否分词的意思是,是否将改field的值进行分词还是作为一个整体不分词搜索。在实际需求中,比如id、身份证号、订单号、这些是不需要分词,直接作为一个整体搜索即可
  • 是否索引:意思就是是否建立索引,如果建立索引,那么搜索的时候可以检索到,大多数情况,如果进行分词,也会进行索引。这样分词才有意义。
  • 是否存储:是否将内容存储到索引中,是否存储看需求,如果存储,搜索结果中可以获取到存储的内容,反之不可以。

luke工具

1.下载地址

https://github.com/DmitryKey/luke/releases

2.启动

luke.bat 双击即可启动

3.luke介绍
https://blog.csdn.net/dac55300424/article/details/24322907

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样虽然避免了内存溢出的可能,但是,每次搜索都要进行一次IO操作,如果大并发访问的时候,你要保证你的硬盘的转速足够的快,还要保证你的cpu有足够高的频率 而我们可以将这两种方式结合下,每次查询都多缓存一部分的结果集,翻页的时候看看所查询的内容是不是在已经存在在缓存当中,如果已经存在了就直接拿出来,如果不存在,就进行查询后,从缓存中读出来. 比如:现在我们有一个搜索结果集 一个有100条数据,每页显示10条,就有10页数据. 安装第一种的思路就是,我直接把这100条数据缓存起来,每次翻页时从缓存种读取 而第二种思路就是,我直接从搜索到的结果集种显示前十条给第一页显示,第二页的时候,我在查询一次,给出10-20条数据给第二页显示,我每次翻页都要重新查询 第三种思路就变成了 我第一页仅需要10条数据,但是我一次读出来50条数据,把这50条数据放入到缓存当中,当我需要10--20之间的数据的时候,我的发现我的这些数据已经在我的缓存种存在了,我就直接存缓存中把数据读出来,少了一次查询,速度自然也提高了很多. 如果我访问第六页的数据,我就把我的缓存更新一次.这样连续翻页10次才进行两次IO操作 同时又保证了内存不容易被溢出.而具体缓存设置多少,要看你的服务器的能力和访问的人数来决定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值