Lucene实现全文检索的流程 ① 绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:确定原始内容即要搜索的内容、采集文档、创建文档、分析文档、索引文档 ② 红色表示搜索过程,从索引库中搜索内容,搜索过程包括:用户通过搜索界面、创建查询、执行搜索,从索引库搜索引擎渲染搜索结
为了减少代码量,写一个公用的增删改公用的获取IndexWriter对象的方法 /** * 增删改公用的获取IndexWriter对象 * @return * @throws Exception */ public IndexWriter getIndexWriter() throws Exc
前文实现了一个lucenne的全文检索,回顾一下我们的流程: 针对每个文档,构建一个文档对象。该文档对象里面用了不同的域,描述了该文档的信息,大小,内容。。。 将文档对象扔进索引库 将索引库,存放在本地磁盘 到磁盘的索引库目录下,创建了一个查询对象,查询条件是:指定内容分词进行查询,获取查询结果
需求:通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来:下图(是一堆文件列表) pom.xml <dependency> <groupId>org.apache.lucene</groupId> <artifactId&g
Lucene创建索引—分词,分词主要介绍这几个问题 分词是什么? 分词干嘛? 分词怎么分? 例如:我们能找到aaabbb.txt文档,但是不能找到aaabbb文档,好像说明fileName只能进行精确匹配。但是不能找到XXXX.txt文档,说明不是精确匹配,而是在索引库中全文检索.txt
既然Lucene是实现全文检索,那么明白以下几个问题, Lucene是什么? Lucene实现全文检索的流程? 索引到底是如何创建的?(Indexing) 索引里面存放的又是什么东西? 搜索的的时候又是如何去查找索引的?(Search) 这5个问题搞明白了,那么lucene就算入门了。 1:lu
需求场景提出 1:在指定(10个)不同名字,不同内容的word文档中,进行任意指定搜索。比如:搜索哪个文档中有:“高富帅”、“吃鸡”、”read”…等词汇 2:站内搜索:搜索任意关键词,出来相关内容。论坛,贴吧,淘宝 3:百度类似的搜索 4:智联招聘的搜索 分析 常规的搜索,我们是对数据库的内容
Redis HyperLogLog Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。 在 Redis
布隆过滤器 BloomFilter是一种空间效率的概率型数据结构,由Burton Howard Bloom 1970年提出的。通常用来判断一个元素是否在集合中。具有极高的空间效率,但是会带来假阳性(False positive)的错误。 False positive && Fal
Redis缓存穿透:查询Redis,为了防止他人恶意使用不存在的key访问redis,造成大批量的出现缓存穿透现象(直接查询数据库,导致数据库扛不住) Maven依赖 添加 Redis & BloomFilter 的核心依赖包: <!--使用Redis--> <depen
原理 布隆过滤器的巨大用处就是,能够迅速判断一个元素是否在一个集合中。因此他有如下三个使用场景: 网页爬虫对URL的去重,避免爬取相同的URL地址 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信) 缓存穿透,将所有可能存在的数据缓存放到布隆过滤器中,当黑客访问不存在的缓
Redis概述 Redis是一个开源的Key-Value存储系统,其中Value支持string、list、set、hash、zset五种数据结构,这些数据都支持push/pop、add/remove、取交集并集、排序等丰富的操作,并且这些操作都是原子性的。 与同为NoSQL型缓存数据库的memc
free命令缓存buff/cache 查看内存的命令:free 或者 top,其中使用free命令都可以看到信息 $ free -mh total used free shared buff/cache available Me
几个月之前,开始深入学习 MySQL 。说起数据库,并发控制是其中很重要的一部分。于是,就这样开起了 MySQL 锁的学习,随着学习的深入,发现想要更好的理解锁,需要了解 MySQL 事务,数据底层的存储方式,MySQL 的执行流程,特别是索引的选择等。 InnoDB 锁一览 先从 MySQL 官网
间隙锁(Gap Lock) 首先谈谈间隙锁是什么。 间隙锁是专门用于解决幻读这种问题的锁,它锁的了行与行之间的间隙,能够阻塞新插入的操作,同时间隙锁的引入也带来了一些新的问题,比如:降低并发度,可能导致死锁。 这里特别记录下读读不互斥,读写/写读/写写是互斥的,但是间隙锁之间是不冲突的,间隙锁会阻塞