王昆立
數據的增刪改查一直都是互聯網最基本的需求!而這些操作的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,需要的同學,敬請關注。。。
關鍵字: ElasticSearch 科技 程序員