如何提高elasticsearch的查詢速度?

王昆立

數據的增刪改查一直都是互聯網最基本的需求!而這些操作的90%都是查!!!

上世紀60年代,數據查詢需求旺盛,關係型數據查詢蓬勃發展,誕生了各種各樣的數據庫和SQL語言!數據庫查詢效率極高,建立索引也只能為字段的粒度!如果是想要對字段中的某些數據做查詢,只能使用like語句,逐字匹配,查詢效率不高!

這時候全文搜索就能體現出更為強大的效率!

全文搜索是對所有的數據進行拆分,對每一個詞都分別建立索引,記錄詞語所在的位置和出現的次數,然後在查詢的時候能快速找到文檔所在處,實現快速查詢!

比如1,我是一個兵!2,我愛你!兩句話會分別拆分之後保存到一個索引文檔中進行維護,比如說我字就會保存有兩次的頻率,並且在兩句話中都有出現,在搜索"我"字的時候,就能把兩句話搜索出來!

比如下圖:

而全文搜索的實現都很多,包括底層的lucence,企業級應用solr,elasticsearch等等!elasticsearch因為其天然的分佈特性,和便於大量水平擴展的特性,restful的服務接口收到廣泛關注和使用!




瞭解全文搜索基本原理以後,本文不對elasticsearch的原理,集群使用,索引分片,傳輸協議展開來講,而且因為elasticsearch是開源的,可以通過簡單的配置就能方便使用,而不用關注其內部實現,回到問題所在,怎麼才能更快的搜索?

1,服務器內存要大一點,因為索引加載需要大量內存,並且最大最小內存設置相同值,防止GC時候的大量stop the world!

2,設置合理的索引刷新時間,indwx.fresh_interval如果設置過大,索引查不到容易導致異常,設置太小,服務器壓力會很大!

3,禁用_all,打開會導致拷貝增加,查詢效率變低!

4,防止設置過多的分片副本,增大合併時間,影響查詢效率!

5,優化查詢返回字段,減少內存佔用!

6,添加查詢緩存!

elasticsearch是一門分佈式搜索技術,涉及到的知識點很多,沒辦法簡單介紹,找時間會詳細的討論並奉上Demo,需要的同學,敬請關注。。。


分享到:


相關文章: