這是一個被我稱之爲「沒有槍、沒有炮,硬着頭皮本身造」的項目。項目是和其它公司合做的三個核心模塊開發。
使用ES的目的是:
1)、採集數據、網站數據清洗後存入ES;
2)、對外提供精確檢索、通配符檢索、模糊檢索、分詞檢索、全文檢索接口等二次封裝接口。html
如上圖所示,ES做爲中間層,一方面存儲數據清洗後存儲的數據,另外一方面對外提供插入、更新、刪除、檢索接口的。前端
1.X,2.X版本有太多侷限性,5.X作了較大性能提高的改進。好比:string字段類型分紅了keyword和text兩種類型,keyword用於精確匹配,text結合設定的分詞器用於全文檢索。
選擇5.X須要勇氣,實踐證實當時「向前一小步」的正確性。jquery
ELK都有安裝。
ES安裝了head插件,用途:查看集羣狀態、查看索引信息、查看mapping信息、查看每一個索引下數據信息、進行簡單字段查詢操做;
安裝了ik分詞插件,用途:分詞,實現全文檢索。
安裝了Kibana,用途:數據對接展現;用DevTool替代postman執行DSL驗證,以驗證增、刪、改、查功能。
安裝了logstash,用途:藉助「logstash-input-jdbc」實現數據庫到ES之間的同步。spring
調研了ES提供的原生API以及Jest等,最終選擇Jest。將Maven工程相關jar包導出到項目中使用。sql
play new 工程名
play eclipsify 工程名
play clean
play deps
play run 測試模式
play start release模式數據庫
ES Java接口能返回的默認的最大記錄數爲10000行。若是想返回超過1W+條的記錄,須要作以下設置:後端
PUT ting_index/_settings
{
"max_result_window" : 500000 }
相似Mysql等關係型數據庫的delete from mtable操做,而不是drop掉表,參考以下:api
POST my_store/products/_delete_by_query
{
"query": { "match_all": {} } }
參考:https://www.elastic.co/guide/en/elasticsearch/reference/master/docs-delete-by-query.html緩存
數據前添加doc一層,以下所示:
strJson = 「{」 + 」 \」doc\」 :」 + strJson + 「}」;tomcat
集羣裏每個實例都要安裝ik插件。
不然,當咱們更新包含指定分詞的mapping的時候會報錯。
報錯信息以下:「whose UTF8 encoding is longer than the max length 32766 「,
這個問題是某個字段size過大致使lucence不能索引引發的。
若是要存儲超過32766字節的數據,那麼須要在mapping中設置字段時,添加ignore_above = 256就能夠了。
舉例,新增Mapping的操做以下:
POST tingindex/tingtype/_mapping
{
"tingtype":{ "properties":{ "content":{ "type":"text", "analyzer":"ik_max_word", "search_analyzer":"ik_max_word", "fields":{ "keyword":{ "ignore_above":256, "type":"keyword" } } }, "publish_time":{ "type":"date", "format":"YYYY-MM-dd HH:mm:ss" }, "author":{ "ignore_above":256, "type":"keyword" }, } } }
參考:
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/ignore-above.html
排查方案:
GET /_cluster/allocation/explain
kibana->management->advanced setting->dateFormat:tz, 編輯,改爲GMT +0。
不指定索引的全文檢索舉例:
http://192.168.11.174:9200/_search?pretty&q=北京
指定索引的全文檢索舉例:
http://192.168.11.174:9200/articles/articles_info/_search?pretty&q=北京
指定字段檢索舉例:
http://192.168.11.174:9200/articles/articles_info/_search?pretty&q=title:我愛北京天安門
【1】分詞對性能的影響:
索引過程當中,分詞會對索引速度有所影響,建議你能夠優化一下你的mapping,沒必要要的就沒必要分詞,甚至沒必要設成可搜索的了。
舉例:5.X中沒必要要分詞的設置爲keyword類型。
【2】分片和副本對性能影響:
分片和副本的設計,應該根據節點數來調整,正常狀況下 節點數= (副本數+1)*分片數,如果你但願提升搜索性能,但是適當提升副本數。
【3】內存對性能的影響:
1).節點的內存分配的不能太少了。
ES其實很佔內存,大部分的操做都是創建在內存足夠的基礎上。
舉例:你的數據量應該在150G-200G左右,我以爲能夠把內存調整到10G左右。
2). ES的內存使用分爲兩部分ES緩存和Lucene經過內核緩存加速一些數據。
3). 若是服務器內存 nG > 64G
,ES的內存儘可能設置低於32G,建議最大31G.
由於es使用「內存指針壓縮」技術,一旦內存內存大於32G這項技術將失效,內存有效使用只有原來的60%~70%。
你沒必要爲內存浪費而擔憂,由於lucene會經過系統把一些聚合和排序的數據緩存起來方便你快速查詢使用。
4) .若是服務器內存 nG < 64G
,建議給ES分配 內存 (n-2)/2G. 首先2G是給系統預留,而後es和lucene。
5) . 若是你想繼續你的實時查詢,儘可能不要使用swap(交換分區),建議關閉系統swap使用
【4】ES線程設置
線程數方法:線程數:=(內核數*3)/2+1
舉例:檢索服務器是24核,因此:線程池的大小=(24*3)/2+1=37 。
參考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html
切記:
1)不要拿到合同或需求就開發。
2)欲速則不達。
3)需求細化後造成《需求規格說明書》,並必定郵件或電話或當面找用戶確認。
對於需求,由頂向下知道須要實現的核心功能,團隊核心敲定分幾個模塊?
逐個模塊細化需求點。
對於新的技術點,在項目啓動後的需求細化階段便可同步進行。
做爲項目經理的我,沒有事必躬親,多關注預研點方案選型、預研難點、預研報告,小細節如:下載、安裝部署、參數驗證、英文翻譯安排團隊其它成員執行。
需求有需求文檔,設計根據項目須要和進度安排有概要設計或詳細設計文檔。
設計文檔千萬不能少,設計的過程就是開發「路演」的過程。
設計文檔必定要梳理清楚架構圖、模塊圖、數據流圖、流程圖。
需求文檔是設計的基礎,需求和設計文檔是開發的基礎。
技術方案的選型很重要,大的方面包括:
1)檢索存儲集羣部署,集羣節點個數選擇等。
2)先後端選型,前端用jquery,jsp仍是js? 後端使用spring,tomcat,仍是play框架?
3)開源方案選型,要提前預研可用性、需求點覆蓋程度、二次開發或封裝難度等。
4)先後端接口對接格式敲定。
5)對外提供檢索服務接口名稱,參數敲定。
思惟活躍主要體如今:
1)方案選型、技術調研快刀斬亂麻,時間緊,不糾結。此路不通,另尋他路。
2)本身不能解決,不要太拖沓,及時google,stackoverflow解決或者和架構師討論解決。
1)接口對接溝通要充分。
接口提供方和接口使用方,要反覆多花時間溝通業務,要定義好數據接口。
此時的耗時,過後你會發現是好事,溝通越充分要好。
2)接口對接要實時同步。
一方修改了,要第一時間告訴對方。
郵件是證據,避免沒必要要賴帳或扯皮。
qq溝通和微信都不是好方式,最主要緣由是不利於查看聊天記錄、不利於快速檢索。
包含但不限於項目總體狀況、本週已完成、下週計劃、項目風險與應對。
團隊成員特色不一樣,切記口頭分工。團隊人少,我用excel作了詳細記錄。
周例會起到承上啓下的做用,有效協調控制項目進度、團隊成員工做飽和度。
一、ES要學習的東西很是多。不糾結,多去官網、官方論壇、stackoverflow、Google檢索答案,
相信我,你並不孤獨。
二、ES還有很長的路要走,繼續精進閱讀與思考,繼續加油!
——————————————————————————————————
更多ES相關實戰乾貨經驗分享,請掃描下方【銘毅天下】微信公衆號二維碼關注。
(每週至少更新一篇!)
和你一塊兒,死磕Elasticsearch!
——————————————————————————————————
2017年09月03日 16:09 於家中牀前
做者:銘毅天下
轉載請標明出處,原文地址:
http://blog.csdn.net/laoyang360/article/details/77623013 若是感受本文對您有幫助,請點擊‘喜歡’支持一下,並分享出去,讓更多的人受益。您的支持是我堅持寫做最大的動力,謝謝!