ES入门笔记

1. ElasticSearch和Kibana 安装版本号保持一致
2.  ElasticSearch从5.0版本开始废除FilterBuilders,将query和filter合并。
3.  must和filter的区别
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
            .must(QueryBuilders.simpleQueryStringQuery(query).field("newContent").field("T"))
            .filter(QueryBuilders.termQuery("key1", "true"))
            .filter(QueryBuilders.termQuery("key2", "true"));
这里的filter,查询不需要评分,效率要高于must(查询打分)。因此全文检索时使用must,属性过滤时使用filter.
4. ES集群的分片机制
ES数据分片,使用scatter/gather分发聚合机制,有点类似于ForkJoin,mapReduce的思想
分片和副本的基本概念: https://blog.csdn.net/my201110lc/article/details/82017516
5. ES的节点类型
客户端节点 | 主节点 | 数据节点  https://www.cnblogs.com/sunfie/p/9598464.html
6. ES的四种搜索类型(SearchType值)
query_then_fetch(es默认的搜索方式)
DFS_query_then_fetch 最准确但性能最差
7. ES和kibana 聚合数据,图表展示
Kibana和granfa都支持对ES数据进行聚合分析,生成饼图,柱状图,热力图,折线图等
granfa支持对influxdb数据进行聚合分析,但Kibana对influxdb目前不支持
influxdb数据聚合性能比ES要高很多,通常情况inluxdb更倾向于做数据聚合分析,es更适合于日志收集并简单查询
8. ES的java客户端
从es7开始,官方建议使用 High Level REST Client ,不建议再使用TransportClient
9.精确查询(条件查询)
字段设置:"index":"not_analyzed"     查询是使用:term查询    查询条件组合使用:filter
属性字段存储不分词,查询值不分词,查询时此条件不需评分
10. 几种常见的查询
term查询: 结构化字段查询,匹配一个值,且输入的值不会被分词器分词
match查询:模糊匹配,先对输入进行分词,对分词后的结果进行查询,文档只要包含match查询条件的一部分就会被返回
match_phrase: 习语匹配,本义确切的phase,对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后满足下述两个条件的document: 
                                1.match_phase中的所有term都出现在待查询字段之中
                                2.待查询字段之中的所有term都必须和 match_phase具有相同的顺序
query_string: 同match_phase的相同点在于,输入的查询条件会被分词,但是不同之外在与文档中的数据可以不用和query_string中的查询条件有相同的顺序。
11.ES的路由
类似的场景: rocketmq将同一司机的轨迹全都路由到同一consumerQueue中。 redis将相同的key存储到集群中的同一台机器中
ElasticSearch的routing算是一个高级用法,但的确非常有用。在我们公司的订单数据,就用merchant_no作为routing,这样就能保证同一个商户的数据全部保存到同一个shard去,后面检索的时候,同样使用merchant_no作为routing,就可以精准的从某个shard获取数据了。对于超大数据量的搜索,routing再配合hot&warm的架构,是非常有用的一种解决方案。而且同一种属性的数据写到同一个shard还有很多好处,比如可以提高aggregation的准确性。
参考:https://www.cnblogs.com/caoweixiong/p/12029789.html
12.High Level REST Client的封装和使用

猜你喜欢

转载自blog.csdn.net/qian_348840260/article/details/106937420
今日推荐