天天看點

嚴選 | 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

并且還有一個次元,建議關注一下:,觸發分片配置設定的時機:不隻是建立索引的階段,還包含:

index 索引增删;

2)節點增删;

3)reroute操作;

4)副本數量改變;

5)叢集重新開機。

10.1elasticsearch不能删除已有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中文社群201902錯題本

銘毅天下——Elasticsearch基礎、進階、實戰第一公衆号