【转载保存】基于Lucene的近实时搜索引擎优化总结
一、搜索優(yōu)化:
? ? 在工程領(lǐng)域,越是看起來“簡(jiǎn)單、確定”的問題,越是難以解決。近實(shí)時(shí)搜索引擎需要解決的問題只有一個(gè):性能!它包含快速索引,快速搜索,以及索引到搜索的快速生效。
? ? 以下為百萬條數(shù)據(jù)級(jí)(適用于千萬級(jí))快速滾動(dòng)數(shù)據(jù)近實(shí)時(shí)搜索引擎實(shí)踐經(jīng)驗(yàn)總結(jié):
?
?1. 針對(duì)技術(shù)優(yōu)化
? ? 1.1 數(shù)值搜索優(yōu)化: 將數(shù)值的范圍縮小,能用 int值 的不要用 long值,能用 float值 的不用要 double值;能用string 替換的,就不要用范圍查詢(特別是大范圍查詢),這些都基于Lucene搜索引擎對(duì)數(shù)值建索引和范圍查詢的原理和特點(diǎn)所決定;
? ? 1.2 搜索語法的簡(jiǎn)化和高級(jí)搜索的支持取得一個(gè)平衡點(diǎn): 謹(jǐn)慎用"*","?"(Wildcard搜索),禁止出現(xiàn) "*AA"的查詢,如果必須支持這樣的查詢,則需要培訓(xùn)用戶了解"*"可能引起的性能問題。
?
?2. 針對(duì)業(yè)務(wù)優(yōu)化
? ? 2.1 特別強(qiáng)調(diào)范圍查詢,必須優(yōu)化。避免大范圍數(shù)值查詢,數(shù)值范圍查詢不可避免的情況下,盡量使用小范圍,這是由業(yè)務(wù)性質(zhì)決定的,比如:說 A > 0的查詢,需要優(yōu)化為某個(gè)更有意義的查詢: [A : 0-100]。
? ? 2.2 能使用短字符串(特別是不做分詞的字符串)搜索的來替代,一定不要用數(shù)值搜索。數(shù)值搜索的特定雖然快,但對(duì)范圍查詢,它有一定的代價(jià),如果使用不合適,代價(jià)會(huì)很大。
?
二、索引優(yōu)化:
? ? 優(yōu)秀的搜索引擎是快速創(chuàng)建索引和快速搜索的一個(gè)平衡體。特別對(duì)近實(shí)時(shí)搜索引擎而言,這個(gè)平衡點(diǎn)更為難以達(dá)到。
? ? 通過一系列測(cè)試和驗(yàn)證,Lucene在【搜索】,【索引】以及【優(yōu)化】之間要達(dá)到平衡其實(shí)很不容易。在頻繁的搜索和索引下,在線的優(yōu)化難以真正起效果。可以理解為優(yōu)先級(jí)有這樣的特性:搜索 > 索引 > 優(yōu)化。搜索的時(shí)間相對(duì)最短,優(yōu)化的時(shí)間最長(zhǎng)。在前二者頻繁操作下,優(yōu)化沒有機(jī)會(huì)(強(qiáng)行優(yōu)化只能導(dǎo)致,搜索和索引停頓,對(duì)近實(shí)時(shí)系統(tǒng)來說不可接受)。因而必須設(shè)置好相應(yīng)的參數(shù),主要包括:緩存大小,索引內(nèi)存大小,索引單次提交數(shù)量上限(等同Merge因子,Lucene不一定嚴(yán)格執(zhí)行),搜索最大并發(fā)數(shù)等。
? ? 大部分的索引優(yōu)化是基于搜索業(yè)務(wù)的,如上述一所描述的用字符串字段替代數(shù)值范圍查詢。而索引本身的創(chuàng)建方式又直接影響到搜索,對(duì)Lucene來說Merge因子的配置是個(gè)關(guān)鍵(內(nèi)存足夠大的情況下)。簡(jiǎn)單的說,Merge因子小,索引慢,但對(duì)大批量建索引性能影響卻不大(索引內(nèi)存足夠大為前提),但同時(shí)它會(huì)使得索引段落數(shù)被限制在合理范圍值(直接影響索引段數(shù)——搜索性能)。相反如果Merge因子小,搜索會(huì)很快,段數(shù)也大,如果不及時(shí)做索引優(yōu)化,對(duì)搜索性能的影響是致命的。
?
三、分布式平衡
? ? 一臺(tái)Lucene服務(wù)器要想達(dá)到近實(shí)時(shí)搜索基本是不可能的,除非搜索量非常小。單臺(tái)搜索量5個(gè)/s以上,一臺(tái)基于Lucene的實(shí)時(shí)搜索基本上會(huì)吃不消,原因不在于搜索本身,而在于索引的同時(shí),保證搜索實(shí)時(shí)性。而建索引的過程如果產(chǎn)生的碎片(段)過多,會(huì)直接影響搜索。總結(jié)下來,給予建索引的服務(wù)器一定的空閑時(shí)間是必須的,也就是說在建索引的時(shí)間段,搜索不能太過頻繁。因而分布式分?jǐn)偹阉鲏毫κ呛苡斜匾摹?/p>
?
?
總結(jié):
? ? 1. 目前3臺(tái)基于Lucene的PC服務(wù)器,高峰并發(fā)數(shù)量在15個(gè)/s左右;
? ? 2. 數(shù)據(jù)量為百萬條級(jí)別(不到200萬),單條數(shù)據(jù)80個(gè)字段,每條大概為200字符(中文、英文、數(shù)字);
? ? 3. 搜索條件基本在7-20關(guān)鍵字,平均搜索速度為98ms;
4. 最慢的搜索為350ms(毫秒)。
總結(jié)
以上是生活随笔為你收集整理的【转载保存】基于Lucene的近实时搜索引擎优化总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive避免MR的情况
- 下一篇: 巧用快捷键轻松设置Excel单元格格式