嚴選 | Elasticsearch中文社區201902錯題本

題記

馬雲演講中曾經提到:很多時候少聽成功專家的話。所有的創業者多花點時間學習別人是怎麼失敗的,因爲成功的原因有千千萬萬,失敗的原因就一兩個點。

創業需要關注別人的失敗,而開發實戰,別人的錯誤經驗、別人的問題也非常有價值。

開發最懊悔的事莫過於:自己費盡腦汁、花費了很長時間解決了問題,原來別人在社區或者別的地方早已經給出了更優化的方案。

開發最最懊悔的事莫過於:別人已經給出了方案,但是我們仍然在黑暗中苦逼的摸索。

因此,我從2018年4月——至今,每月都會梳理出了Elasticsearch中文社區的精華乾貨——簡稱:Elastic錯題本
問題大多來自Medcl、wood大叔等大牛的精彩回覆,結合實戰嚴選的核心問題。

放在了GitHub上。

GitHub地址:https://github.com/laoyang360/deep_elasticsearch/tree/master/es_accumulate

目的:提前加深認知,少重複走別人的彎路!

0、【Kibana】Kibana CCR功能連接失敗的處理方法

【描述】

ES的cross cluster功能 很簡單就可以配置成功,kibana也支持通過 集羣名:索引名 的方式直接調用,但是發現一個很難受的問題,就是當有一個集羣連接不上時,整個面板就會提示連接失敗,其他連接成功的數據也不顯示了。大家有什麼解決方案嗎?當集羣連接不上就跳過之類的設置。

【解答】
6.1版本後,會有一個skip_unavailable的參數,對症你的問題。

1、【Kibana】kibana圖表能做自定義標註嗎?

可以的,用 TSVB,支持標註。
詳細實現推薦:https://elasticsearch.cn/article/701

2、es能否9200端口監聽在127.0.0.1 9300端口監聽到0.0.0.0這樣配置?

描述:現在我想9200 API接口端口人監聽在迴環地址127.0.0.1上 然後前面再加一個nginx 用來作訪問日誌審計 用戶限制等功能,
而tcp節點數據端口9300就監聽在0.0.0.0所有可用的IP地址上。ES是6.5.4版本 有沒有辦法通過更改elasticsearch.yml配置來實現?

【回覆】
HTTP 的是 http.bind_host
http.bind_host——The host address to bind the HTTP service to.
Defaults to http.host (if set) or network.bind_host.

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html

TCP 的是 transport.bind_host
transport.bind_host——The host address to bind the transport service to.
Defaults to transport.host (if set) or network.bind_host.

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html

TCP 是集羣內互聯的,同樣要做好加密措施,要綁也是綁定內網地址,不要4個0。

3、給ES 9200 端口配置域名無效

描述:
大家有給ES 的9200 配置過域名嗎

配置後發現在瀏覽器直接訪問域名可以像之前一樣看到ES 的信息

但是如果在程序中或者 postman 中使用域名/索引/_search 的時候發現並獲取不到相應的數據

【解答】

先試試這個——配置域名很簡單,前面加一個 nginx 做一下反向代理就可以了:

location ^~ /data/
{
proxy_pass http://192.168.187.xxx:9200/;
}

關鍵點在用最後面的/符號。

4、增加專用的協調節點,查詢沒有變快

【解答】

1、依靠協調節點去提高查詢速度,大部分情況下收益不會有預期的大,協調節點是爲了更合理的分配資源,
參與merge時資源的消耗,查詢速度主要還是看索引本身和查詢語句是否有可以優化的空間。

2、增加協調節點不一定能使得查詢速度明顯提升,
最重要的要看你查詢的數據量和查詢語句的優化

【補充知識點-官網】

協調節點用途——諸如搜索請求或批量索引請求之類的請求可能涉及保存在不同數據節點上的數據。
例如,搜索請求在兩個階段中執行,這兩個階段由接收客戶端請求的節點 - 協調節點協調。
1)在分發階段,協調節點將請求轉發到保存數據的數據節點。 每個數據節點在本地執行請求並將其結果返回給協調節點。
2)在收集階段,協調節點將每個數據節點的結果減少爲單個全局結果集。

(經常被問到的問題)每個節點都隱式地是一個協調節點
這意味着將所有三個node.master,node.data和node.ingest設置爲false的節點僅用作協調節點,無法禁用該節點。
結果,這樣的節點需要具有足夠的存儲器和CPU以便處理收集階段。

5、Elasticsearch開源和商業化版本區別?

https://www.elastic.co/subscriptions

6、【反向查詢】ES是否可以實現反向查找,類似敏感詞的功能

請問:ES是否可以實現反向查找,類似敏感詞的功能,需求是:一篇文章裏,需要查找 文章中是否有數據 在索引中存在(完全匹配)

【實現舉例】:
percolate查詢可用於匹配存儲在索引中的查詢。 percolate查詢本身包含將用作查詢以與存儲的查詢匹配的文檔。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html

7、查詢時使用terms來替換多個term可以提高效率嗎?

根據 lucene 官方的解釋:
當 term 的個數少的時候,termsQuery 等效爲多個 termQuery 使用 boolQuery 使用 or 操作符連接起來;
當 term 的個數多的時候,termsQuery 查詢創建一個位集的方式進行查詢,效率會比普通的 bool 方式好一些

https://lucene.apache.org/core/6_4_2/queries/org/apache/lucene/queries/TermsQuery.html

8、【多次提問類似問題】elasticsearch 批量刪除 導致使用磁盤容量上升

注意:

1、es的刪除是標記模式,刪除不會是立馬刪除,會給數據打個刪除狀態,在索引和段合併的過程中,es會整合資源,
將標記刪除的數據真正的刪除掉。所以你看到是一個緩慢的磁盤下降過程

2、es的合併,是將要合併的segment讀取出來,再寫入到新的segment,然後刪除老的segment,所以,消耗大量的資源和磁盤空間。

9、logstash 字符串轉換

https://elasticsearch.cn/question/4469
配置見文件附件部分

10、超大ES集羣如何控制主分片均勻分配

這裏按照你的描述可能涉及主分片的分配策略的修改。
5.X版本之後的主分片的選舉實現:依據allocation id 從 inSyncAllocationIds 列表中選擇主分片。

推薦看一下官方文檔:

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-allocation.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html

並且還有一個維度,建議關注一下:,觸發分片分配的時機:不只是創建索引的階段,還包含:

  1. index 索引增刪;
    2)節點增刪;
    3)reroute操作;
    4)副本數量改變;
    5)集羣重啓。

10、elasticsearch不能刪除已有index中的字段吧?

刪除Mapping的字段,而非字段值,字段值可以通過script刪除。
字段驗證如下:

1、增加字段 可以 已驗證
2、刪除字段 不可以
4、修改字段 不可以
3、修改字段類型 不可以

不過ES有其他方案可以替換,藉助reindex,數據量大會有性能問題。

注意:ES 6.X版本新特性,字段支持別名字段,能很好的解決此類問題。
https://www.elastic.co/guide/en/elasticsearch/reference/master/alias.html

11、MySQL中表無唯一遞增字段,也無唯一遞增時間字段,該怎麼使用logstash實現MySQL實時增量導數據到es中?

我的ELK版本是6.5.3

【回覆】

ogstash增量有兩種方式:1、基於時間遞增;2、基於遞增字段比如:id。
兩者都沒有,就不大好辦。
如果非要使用logstash,建議修改一下表結構。

其他的同步方式:比如——kafka-connector,也需要基於時間或者自增id的,才能實現增量。

推薦binlog方案:https://blog.csdn.net/laoyang360/article/details/87897886

12、想請教您一個高亮搜索,同時展示關聯字段的問題

inner_hits API能滿足要求,詳見鏈接:
https://elasticsearch.cn/question/6887

# 2 inner_hits能滿足你的要求
POST my_index/_search
{
  "query": {
    "nested": {
      "path": "data",
      "query": {
        "match": {
          "data.comment": "commercial"
        }
      },
      "inner_hits": {}
    }
  },
  "highlight": {
    "fields": {
      "data.comment": {
        "number_of_fragments": 0
      }
    },
    "pre_tags": [
      "<em>"
    ],
    "post_tags": [
      "</em>"
    ]
  }
}

13、【推薦閱讀】Elasticsearch 6.6 Index Lifecycle Management

再也不用管理那些crontab了!
https://elasticsearch.cn/article/6358

14、【推薦】logstash在Elasticsearch中創建的默認索引模板問題

https://cloud.tencent.com/developer/article/1359811

在這裏插入圖片描述
銘毅天下——Elasticsearch基礎、進階、實戰第一公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章