由于最近做毕设,需要做一个商品查询模块,用到了lucene来做商品索引的查询,原因为:
1.marks(商品标签)字段含有多个标签,当针对某个标签查询时,或许只能用like 查询,这样的查询慢!
2.没用过lucene,想用来测试下性能
可能结果早就显而易见,但是这次测试我要的是数据,不仅仅是结果,所以别说什么你们知道答案类似的话~
言归正传,我的设计是这样的:
而,性能对比,对比的就是搜索条件,是在lucene快,还是直接去mysql快!
我的lucene模块提供了两种索引方式,
一种是创建索引在文件中,需要查询时在索引文件中去查询
二是在内存中创建索引,需要时直接再内存中查询
由于第二种方式明显快于第一种(设计第一种的原因是,索引仅仅在内存是不够的,需要持久化,不能每次都重新拉数据再创建索引),所以仅仅是放上测试数据,仅作对比!
说明:
1.MYSQL只有主键索引,marks字段建有索引,但是通过
explain select * from t_baobei t where t.baoBeiMarks like '%手' ;
explain select * from t_baobei t where t.baoBeiMarks like '%手%' ;
explain select * from t_baobei t where t.baoBeiMarks like '手%' ;
三种情况确认,该SQL语句没有用到索引
2.lucene分词器用的是
StandardAnalyzer()
测试1: (1W条数据)
创建索引在文件中:
index's num is 10000
create use : 1953 ms
search use : 547 ms
创建索引在内存中:
index's num is 10000
create use : 1046 ms
search use : 94 ms
MYSQL中:
SQL 语句为 SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手机%'
测试2: (3W条数据)
创建索引在文件中:
第一次
index's num is 30000
create use : 2641 ms
search use : 609ms
第二次
index's num is 30000
create use : 3063 ms
search use : 563ms
第三次
index's num is 30000
create use : 3704 ms
search use : 547ms
第四次:删除已有索引,索引大小3M
index's num is 30000
create use : 2500 ms
search use : 531ms
可以看出:
1.创建索引的耗时随记录数的增加而增加,3W条数据的平均耗时为3S以上,数据量是原来的3倍,耗时自是1.5倍
2.从1W到3W,搜索耗时增加不大
创建索引在内存中:
index's num is 30000
create use : 1687 ms
search use : ~94 ms(搜索'手');
search use : ~110 ms(搜索'手机');
可以看出:
1.和1W数据在内存中创建和搜索比,数据量是原来的3倍,创建耗时是原来1.5倍,搜索耗时比本没有差别
2.和在文件中创建和搜索索引比,同样的数据量(3W),创建耗时减少一半,搜索耗时,减少一个数量级!!
3.和MYSQL 相比四种like方式来说,基本没有竞争优势,除最耗时的第一条SQL外,其余mysql均只有lucene的20%
MYSQL中:
* (30000条数据)
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手%'
时间: 140ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '手%'
时间: 30ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手机%'
时间: 16ms --40ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '手机%'
时间: 16ms --40ms
PS: 发现一个有趣的现象,不同的like方式的写法,搜索时间差距这么大.字符越少,%越多,粒度就越细.耗时越严重
- 大小: 23.6 KB
分享到:
相关推荐
3. **查询解析**:`QueryParser`类负责将用户的查询字符串转化为 Lucene 可识别的查询对象。源码中包含了对布尔查询、短语查询等多种查询类型的处理逻辑。 4. **搜索过程**:`Searcher`类实现了搜索功能,包括`...
5. **其他组件**: 除了上述组件,Lucene 3.5还可能包含了其他实用工具,如倒排索引构建工具、性能测试工具、示例代码等,帮助开发者更好地理解和使用Lucene。 使用Lucene 3.5时,开发者需要注意的是,虽然这是一个...
在这个版本中,Lucene已经展现出了其在文本分析、索引构建和查询执行等方面的卓越性能。本文将围绕Lucene 3.5的源代码进行深入探讨,以帮助读者理解其核心机制和工作原理。 一、Lucene架构概述 Lucene的架构主要由...
luke3.5 可查看lucene3.5索引
本文将详细介绍如何在Lucene 3.5中进行索引的创建、文档的添加、删除、修改和查询操作。 一、创建索引 1. 初始化环境:首先,我们需要导入Lucene的相关库,包括核心库(lucene-core-3.5.0.jar)、分析库(lucene-...
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
本篇文章将围绕“lucene3.5全文检索案例lucene+demo”,详细讲解Lucene 3.5的核心概念、关键功能以及如何通过实例进行操作。 一、Lucene 3.5核心概念 1. 文档(Document):Lucene中的最小处理单元,相当于数据库...
《Lucene3.5实例详解:构建全文搜索引擎》 Apache Lucene是一个开源的全文检索库,为Java开发者提供了强大的文本搜索功能。在本实例中,我们将深入探讨如何使用Lucene 3.5版本来构建一个基本的全文搜索引擎,主要...
Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。它提供了高级文本检索功能,广泛用于构建搜索引擎和其他需要高效全文检索能力的应用。Lucene 3.5 API 是该库在2011年发布的一个版本,包含了对当时...
lucene3.5高亮
总之,Lucene 3.5版本的更新带来了诸多改进,包括性能优化、新的查询功能和更好的多线程支持,使得开发者能够构建更强大、更高效的搜索引擎。同时,理解和解决在实际应用中遇到的问题也是优化Lucene性能的关键步骤。
chm格式的Lucene帮助文档,Lucene3.5
Lucene 3.5是Apache Lucene项目的一个重要版本,它是一个高性能、全文本搜索库,为开发者提供了强大的文本搜索功能。作为开源软件,Lucene的源码对学习和理解搜索引擎技术具有极高的价值。下面我们将详细探讨Lucene ...
《Lucene 3.5中文分词案例解析》 Lucene是一个开源的全文搜索引擎库,广泛应用于各种信息检索系统中。在3.5版本中,Lucene已经支持了中文分词,这对于处理中文文档和搜索需求显得尤为重要。本文将深入探讨Lucene ...
Lucene 3.5是该系列的一个稳定版本,具有较高的性能和灵活性。 二、Lucene 3.5主要特性 1. **索引结构**:Lucene采用倒排索引,将文档中的词汇与包含这些词汇的文档进行关联,极大地提高了搜索速度。 2. **分词器...
总结来说,Lucene 3.5 提供了一整套完整的文本检索工具,包括索引、查询、过滤和排序等功能。开发者可以通过 API 快速构建自己的全文搜索引擎,尽管英文文档可能会对初学者造成一定的困扰,但是通过深入学习和实践,...
### 三、Lucene 3.5 的优化与扩展 1. **内存优化**:3.5 版本支持 RAMDirectory,允许在内存中构建索引,提高速度但消耗更多内存。 2. **多线程支持**:IndexWriter 支持多线程并发写入,提高了索引构建效率。 3....
在“关于lucene3.5的使用”这个主题中,我们将深入探讨Lucene 3.5的关键特性、核心组件以及如何通过实例进行应用。首先,我们需要了解以下几个核心概念: 1. **索引(Index)**:Lucene 的工作基于索引,就像书籍的...
以上是对 Lucene 3.5 的学习笔记总结,涵盖了从索引构建到查询操作的基础和高级功能。通过深入理解这些概念和实践应用,可以帮助开发者更好地利用 Lucene 和 Solr 构建高效且功能强大的搜索应用。
Lucene3.5视频教程(内含分享链接) 一共50集, 包含各部分讲解及源码