一、搜索优化:

在工程领域,越是看起来“简单、确定”的问题,越是难以解决。近实时搜索引擎需要解决的问题只有一个:性能!它包含快速索引,快速搜索,以及索引到搜索的快速生效。

以下为百万条数据级(适用于千万级)快速滚动数据近实时搜索引擎实践经验总结:

 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的近实时搜索引擎优化总结相关推荐

  1. 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 ...

  2. 【转载保存】lucene优秀文章整理

    Lucene解析 - 基本概念:   https://www.jianshu.com/p/fbb171e73721?from=timeline&isappinstalled=0       L ...

  3. 基于lucene语法的实时文本搜索与匹配--Tripod

    Tripod是一款基于lucene语法实现的,可对文本数据进行实时匹配的开源工具,其工程路径为https://github.com/colorknight/tripod.git.在一定场景中,使用它, ...

  4. 【转载保存】lucene正则查询使用注意

    今天要分享的是关于lucene中另外一种丰富的查询方式----正则查询,lucene内置了许多的查询API,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询API,基本 ...

  5. 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用

    原链接:https://www.xttblog.com/?p=3532 所有的搜索基本上都存在精确匹配,包含等操作.Lucene 中同样存在这样的操作,今天我们以 IntPoint 为例,来说说 Lu ...

  6. 基于Lucene、Servlet新闻搜索引擎——国科大信息检索导论(王斌)大作业

    GitHub地址:https://github.com/mJackie/LTY-Search 详细文档参见 设计文档 作业要求 (1-7个选课学生组成1队),完成以下任务(12月份末考查): 新闻及评 ...

  7. 基于Lucene垂直搜索引擎的研究与开发实践报告

    目录 一.垂直搜索引擎概述 二.项目概述 三.关键技术 3.1 Lucene 3.2 全文检索 四.系统设计 4.1 实现全文检索 4.1.1.Lucene 实现全文检索的流程 4.2 可视化界面设计 ...

  8. 搜索引擎优化(SEO)软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

    报告页数: 150 图表数: 100 报告价格:¥16800 本文研究全球与中国市场搜索引擎优化(SEO)软件的发展现状及未来发展趋势,分别从生产和消费的角度分析搜索引擎优化(SEO)软件的主要生产地 ...

  9. 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步

    转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(四)-样本搜索和找回-基于漫游者号模拟器-决策树
  2. html怎样获取画面项目的坐标,如何使用HTML5实现地理位置的获取
  3. python之进程和线程2
  4. html 使用百度搜索,百度搜索uzer,进入主页
  5. asp.net的10个提升性能或扩展性的秘密(一)
  6. 版本控制工具 Git 和SVN 的区别
  7. 用户分层,该怎么分才合理(实操版)
  8. jsp中打开新的html网页,jsp中用window.open()打开新页面的相关设置
  9. Linux(进程概念详解)
  10. 【“计算机科学与技术”专业小白成长系列】计算机科学与技术主要学什么?
  11. 成功的人生需要准确的定位
  12. webug4.0总结篇
  13. 电话号码对应英文单词
  14. 【SAP】公司代码与采购组织的分配关系
  15. ios - 打开appstore应用、打开appstore评论、打开其他应用
  16. python爬虫js逆向加密,Web爬虫处理参数js加密、js混淆、js逆向
  17. cscope使用简介
  18. 轻量级浏览器NetSurf学习(九)-- 如何基于NetSurf打造自己的浏览器
  19. QQ显IP显隐身制作原理介绍转)
  20. Django–模型层orm查询

热门文章

  1. 消息队列(5):RocketMQ
  2. synthesize和dynamic
  3. 现代软件工程 其实还是人的问题
  4. shiro ajax权限拦截器,Shiro Ajax请求权限不满足,拦截后解决方案
  5. java 自动生成文档_[原]java开发文档的自动生成方式
  6. linux ofstream open,浅谈linux性能调优之十一:内存分配管理
  7. nlp 财务提取_RPA,智慧财务时代的“珍妮纺织机”来了?
  8. 用python编写最简单的记事本_Python使用字典实现的简单记事本功能示例
  9. python 截取字符串6位_在Python中从字符串获取x个最低有效位
  10. sql unicode转中文_SELECT语句《SQL必知必会》