【转载保存】基于Lucene的近实时搜索引擎优化总结
一、搜索优化:
在工程领域,越是看起来“简单、确定”的问题,越是难以解决。近实时搜索引擎需要解决的问题只有一个:性能!它包含快速索引,快速搜索,以及索引到搜索的快速生效。
以下为百万条数据级(适用于千万级)快速滚动数据近实时搜索引擎实践经验总结:
1. 针对技术优化
1.1 数值搜索优化: 将数值的范围缩小,能用 int值 的不要用 long值,能用 float值 的不用要 double值;能用string 替换的,就不要用范围查询(特别是大范围查询),这些都基于Lucene搜索引擎对数值建索引和范围查询的原理和特点所决定;
1.2 搜索语法的简化和高级搜索的支持取得一个平衡点: 谨慎用"*","?"(Wildcard搜索),禁止出现 "*AA"的查询,如果必须支持这样的查询,则需要培训用户了解"*"可能引起的性能问题。
2. 针对业务优化
2.1 特别强调范围查询,必须优化。避免大范围数值查询,数值范围查询不可避免的情况下,尽量使用小范围,这是由业务性质决定的,比如:说 A > 0的查询,需要优化为某个更有意义的查询: [A : 0-100]。
2.2 能使用短字符串(特别是不做分词的字符串)搜索的来替代,一定不要用数值搜索。数值搜索的特定虽然快,但对范围查询,它有一定的代价,如果使用不合适,代价会很大。
二、索引优化:
优秀的搜索引擎是快速创建索引和快速搜索的一个平衡体。特别对近实时搜索引擎而言,这个平衡点更为难以达到。
通过一系列测试和验证,Lucene在【搜索】,【索引】以及【优化】之间要达到平衡其实很不容易。在频繁的搜索和索引下,在线的优化难以真正起效果。可以理解为优先级有这样的特性:搜索 > 索引 > 优化。搜索的时间相对最短,优化的时间最长。在前二者频繁操作下,优化没有机会(强行优化只能导致,搜索和索引停顿,对近实时系统来说不可接受)。因而必须设置好相应的参数,主要包括:缓存大小,索引内存大小,索引单次提交数量上限(等同Merge因子,Lucene不一定严格执行),搜索最大并发数等。
大部分的索引优化是基于搜索业务的,如上述一所描述的用字符串字段替代数值范围查询。而索引本身的创建方式又直接影响到搜索,对Lucene来说Merge因子的配置是个关键(内存足够大的情况下)。简单的说,Merge因子小,索引慢,但对大批量建索引性能影响却不大(索引内存足够大为前提),但同时它会使得索引段落数被限制在合理范围值(直接影响索引段数——搜索性能)。相反如果Merge因子小,搜索会很快,段数也大,如果不及时做索引优化,对搜索性能的影响是致命的。
三、分布式平衡
一台Lucene服务器要想达到近实时搜索基本是不可能的,除非搜索量非常小。单台搜索量5个/s以上,一台基于Lucene的实时搜索基本上会吃不消,原因不在于搜索本身,而在于索引的同时,保证搜索实时性。而建索引的过程如果产生的碎片(段)过多,会直接影响搜索。总结下来,给予建索引的服务器一定的空闲时间是必须的,也就是说在建索引的时间段,搜索不能太过频繁。因而分布式分摊搜索压力是很有必要的。
总结:
1. 目前3台基于Lucene的PC服务器,高峰并发数量在15个/s左右;
2. 数据量为百万条级别(不到200万),单条数据80个字段,每条大概为200字符(中文、英文、数字);
3. 搜索条件基本在7-20关键字,平均搜索速度为98ms;
4. 最慢的搜索为350ms(毫秒)。
【转载保存】基于Lucene的近实时搜索引擎优化总结相关推荐
- Katta:基于Lucene可伸缩分布式实时搜索方案
http://www.ij2ee.com/2011/11/29/katta%EF%BC%9A%E5%9F%BA%E4%BA%8Elucene%E5%8F%AF%E4%BC%B8%E7%BC%A9%E5 ...
- 【转载保存】lucene优秀文章整理
Lucene解析 - 基本概念: https://www.jianshu.com/p/fbb171e73721?from=timeline&isappinstalled=0 L ...
- 基于lucene语法的实时文本搜索与匹配--Tripod
Tripod是一款基于lucene语法实现的,可对文本数据进行实时匹配的开源工具,其工程路径为https://github.com/colorknight/tripod.git.在一定场景中,使用它, ...
- 【转载保存】lucene正则查询使用注意
今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询,lucene内置了许多的查询API,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询API,基本 ...
- 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用
原链接:https://www.xttblog.com/?p=3532 所有的搜索基本上都存在精确匹配,包含等操作.Lucene 中同样存在这样的操作,今天我们以 IntPoint 为例,来说说 Lu ...
- 基于Lucene、Servlet新闻搜索引擎——国科大信息检索导论(王斌)大作业
GitHub地址:https://github.com/mJackie/LTY-Search 详细文档参见 设计文档 作业要求 (1-7个选课学生组成1队),完成以下任务(12月份末考查): 新闻及评 ...
- 基于Lucene垂直搜索引擎的研究与开发实践报告
目录 一.垂直搜索引擎概述 二.项目概述 三.关键技术 3.1 Lucene 3.2 全文检索 四.系统设计 4.1 实现全文检索 4.1.1.Lucene 实现全文检索的流程 4.2 可视化界面设计 ...
- 搜索引擎优化(SEO)软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
报告页数: 150 图表数: 100 报告价格:¥16800 本文研究全球与中国市场搜索引擎优化(SEO)软件的发展现状及未来发展趋势,分别从生产和消费的角度分析搜索引擎优化(SEO)软件的主要生产地 ...
- 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步
转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...
最新文章
- Udacity机器人软件工程师课程笔记(四)-样本搜索和找回-基于漫游者号模拟器-决策树
- html怎样获取画面项目的坐标,如何使用HTML5实现地理位置的获取
- python之进程和线程2
- html 使用百度搜索,百度搜索uzer,进入主页
- asp.net的10个提升性能或扩展性的秘密(一)
- 版本控制工具 Git 和SVN 的区别
- 用户分层,该怎么分才合理(实操版)
- jsp中打开新的html网页,jsp中用window.open()打开新页面的相关设置
- Linux(进程概念详解)
- 【“计算机科学与技术”专业小白成长系列】计算机科学与技术主要学什么?
- 成功的人生需要准确的定位
- webug4.0总结篇
- 电话号码对应英文单词
- 【SAP】公司代码与采购组织的分配关系
- ios - 打开appstore应用、打开appstore评论、打开其他应用
- python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向
- cscope使用简介
- 轻量级浏览器NetSurf学习(九)-- 如何基于NetSurf打造自己的浏览器
- QQ显IP显隐身制作原理介绍转)
- Django–模型层orm查询
热门文章
- 消息队列(5):RocketMQ
- synthesize和dynamic
- 现代软件工程 其实还是人的问题
- shiro ajax权限拦截器,Shiro Ajax请求权限不满足,拦截后解决方案
- java 自动生成文档_[原]java开发文档的自动生成方式
- linux ofstream open,浅谈linux性能调优之十一:内存分配管理
- nlp 财务提取_RPA,智慧财务时代的“珍妮纺织机”来了?
- 用python编写最简单的记事本_Python使用字典实现的简单记事本功能示例
- python 截取字符串6位_在Python中从字符串获取x个最低有效位
- sql unicode转中文_SELECT语句《SQL必知必会》