严选 | 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基础、进阶、实战第一公众号

发布了359 篇原创文章 · 获赞 2735 · 访问量 329万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览