ElasticSearch-问题总结

xiaoxiao2021-02-28  125

最近使用ES(ElasticSearch)存放了一些业务上的数据,虽然之前也使用过,但是使用规模不大,只是存储了几台测试环境的数据。在新的业务上使用时间也有快2个月了,现在对于遇到的一些问题(坑),进行总结。并且后续继续更新一些相关阅读笔记和总结。

1 中文分词相关

      1.1 ES自带的分词器是不支持中文分词的,需要中文分词需要自己重新安装对应的插件,目前我们使用的IK分词器。使用IK分词器话,最好提前配置好热更新配置。否则回头再更新的话,需要重启ES。

      1.2 关于热词和停用词更新。自己插入新的热词后,不会更新已有的数据(猜测是因为文档在插入的时候已经建立了对应的索引。)

2 ES默认值

2.1 ES查询默认值返回10条数据,若要返回多条可以使用size。

2.2 ES最大返回记录数据 size+from不能大于1w,否则会报错。若想查询1w条以后,可以设置index.max_result_window大于1w条。因为from+size太大排序过程会非常消息CPU、内存和宽带。如果确实需获取大量数据,也可以考虑将搜搜类型scan禁用排序,结合scroll来获取大量数据。

     2.3 ES的term聚合(类似sql的group by),默认返回的也是前10个聚合。若要返回全部,可以将size设置为0.

     2.4 ES查询条件数量也 不能超过1024个,比如term查询,不能使用超过1024个查询条件,否则会报错。类似SQL的in查询条件不能超过1000个。   

3 关于文档中 时间date。

   若要将结果展示到kibana等平台,最好需要在ES数据类型中,加入时间类型,否则展示的时候很多功能不能用。可以参考logstash和ES使用时候的logstash动态模板

4 ES支持的时间格式,和自己目前使用的不匹配,导致时间不能正确转化为date类型,对于这种情况需要自己定义动态模板。

5 关于分片数量和ES节点数量的问题,在网上没有搜索到相关内容,能搜到的都将的比较笼统,所以目前使用都是默认的一些设置。而且主分片在索引创建后就不能在修改。

6 ES的数据更新,默认1s后才能被搜到,若想插入的数据及时被搜索,可以在数据插入后,调用update方法。

7 ES和关系数据库相比,主要是查询效率比较快,而且能进行全文文本搜索,并且能对结果进行相关性排序。通过按照时间来创建索引,也类似数据库分片

8 从应用将数据发送给ES,其实发送的是JSON,ES自己会将对应的字段转化成对应类型。

转载请注明原文地址: https://www.6miu.com/read-65365.html

最新回复(0)