Elasticsearch5.6.16 api 集合
es:5.6.16
一、索引模板
1、创建索引模板
1 | PUT http://192.168.x.x:9201/_template/shop_template |
可参考:https://www.cnblogs.com/shoufeng/p/10641560.html
二、索引别名
1、
可参考:https://www.cnblogs.com/libin2015/p/10649189.html
三、索引操作
1、单一字段精准查询(查询字段是keyword):
1 | POST http://192.168.x.x:9201/access_log/_search |
2、时间范围查询:
1 | POST http://192.168.x.x:9201/access_log/_search |
参考资料:
https://www.cnblogs.com/shoufeng/p/11266136.html
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-range-query.html
3、条件删除数据
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-delete-by-query.html
1 | curl -H 'Content-type: application/json' -XPOST 'http://es_ip:9201/events-hiostory/_delete_by_query' -d '{ |
1 | curl -H 'Content-type: application/json' -XPOST 'http://54.19.129.3:9200/events-history-system-2021111722/_delete_by_query' -d '{ |
4、查看索引 mapping 结构
1 | curl -XGET "http://x.x.x.x:9200/test-index/_mapping" |
5、查看索引列表,并根据索引大小倒序排序
1 | curl -XGET "http://172.26.x.x:9200/_cat/indices?format=json&index=*&s=store.size:desc,health,index,pri,rep,docs.count,mt" |
参考资料:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/cat-indices.html#cat-indices
6、Filter 中 term 和 range 、search_after 同时使用(多条件查询)
1 | GET /_search |
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html
1 | 多条件组合 |
查询 xxx-index,获取要查询的 system 表
1 | { |
7、聚合某字段
1 | GET /test-index-*/test_type/_search |
8、根据Name分组,每组根据Time字段倒序排列,且只返回一条数据
1 | curl -H 'Content-type: application/json' -XGET 'http://192.168.x.x:9200/test-index-202201/_search' -d '{ |
参考资料:https://elasticsearch.cn/question/10928
9、多 term 查询
1 | { |
10、段合并相关操作
1 | 执行索引段合并 |
11、query、bool、filter
用 filter 包起来不会计算分值,可用来提高查询速度。
1 | { |
12、当数据总量大于1万时,ES查询返回的total值总为1万的解决办法
在Elasticsearch 7.x版本之前,搜索操作默认会跟踪和返回匹配总数的准确计数。但从Elasticsearch 7.0开始,引入了track_total_hits
参数,它可以用来控制是否计算查询匹配的文档总数。
在Elasticsearch中,track_total_hits
参数用来控制是否对查询匹配的文档数进行精确计数。在某些场景中,你可能需要知道一个查询返回的精确文档总数,即使这个数字非常大,超过了默认的10,000条文档限制。
默认情况下,Elasticsearch在查询返回的hits.total
中为效率起见会提供一个近似值,这个值在7.x及以后的版本中默认为10,000。这意味着如果你的查询匹配的文档数超过10,000,Elasticsearch不会返回精确的匹配数,而是返回10,000+作为一个指示,说明匹配的文档数至少有10,000条。
当你设置"track_total_hits": true
时,Elasticsearch将提供查询匹配的精确文档数,而不管这个数目是多少。这会使得查询更消耗资源,因为它需要遍历所有匹配的文档来提供一个精确的计数。
在某些业务场景中,了解精确的匹配文档数是有价值的,比如统计或者分析目的。但请记住,开启精确计数可能会对性能有影响,尤其是在匹配大量文档的查询上,因此应该根据你的应用场景和性能要求谨慎使用。
解决办法:
7.x 版本之后:
传参增加:
1 | { |
java 代码:
1 | SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().trackTotalHits(true); |
13、from+size 超过 index.max_result_window 报错
如果用 from size 的方式分页,默认只能分页查询到 index.max_result_window 配置值(默认是1万)。大于该值,查询就会报错:
- 使用
from
和size
进行分页:默认情况下只能检索到第1万条记录(由 index.max_result_window 配置设置)。如果尝试检索超出这个范围的数据,Elasticsearch会报错,因为这会对集群的性能造成严重影响。如果你能够通过修改查询参数来确保结果集在1万以内,比如限制时间范围或其他过滤条件,那么使用from
和size
是合适的。 - 数据量超过1万使用
search_after
:当你有大量数据需要处理,且数据量超过了10万条记录时,使用search_after
是一个更好的选择。search_after
参数允许你基于上一次查询的最后一条记录的排序值来检索下一批数据。这是一种高效的方法来按顺序检索大量数据,但它确实不支持传统意义上的随机跳页。 - 不支持跳页查询:由于
search_after
需要前一个结果批次的最后一条记录信息来检索下一批数据,因此它不支持随机跳页查询,即你无法直接跳到结果集的中间某个位置。这对于需要随机访问特定页面的应用场景可能是一个限制。
因此,根据您的具体需求,您的选择是合理的。在数据量不大,且查询结果保证在10万以内时,使用from
和size
进行分页查询;当数据量很大时,则需要使用search_after
来顺序读取数据,或者考虑其他方法比如Scroll API
来处理大批量数据的检索。
14、Bool 查询
Bool 查询现在包括四种子句,must、filter、should、must_not。
可参考:
15、根据docId更新某文档
1 | curl -H 'Content-type: application/json' -XPOST 'http://x.x.x.x:9200/test-index-202212/doc/AYUI4HTL_6uoiy8Q9sy0/_update' -d '{ |
16、不等于
1 | { |
17、wildcard模糊查询
1 | { |
18、数据中含有 id 这个字段的数据
1 | { |
19、Match
分词匹配检索
1 | { |
20、match、fuzzy、wildcard 的区别
参考资料:https://blog.csdn.net/weixin_43859729/article/details/108134329
21、inList - terms query
1 | { |
该语句等同于 sql 语句中的 inList 。
22、匹配查询 match
match 和 term 的区别是,match 查询的时候,elasticsearch 会根据你给定的字段提供合适的分析器,而 term 查询不会有分析器分析的过程,match 查询相当于模糊匹配,只包含其中一部分关键词就行。
同时还要注意 match 系列匹配时,datatype 要设置为 text,否则不会开启分词。
23、Like:模糊查询
1 | { |
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2020/06/17/ELK/Elasticsearch/API/es-5-6-16-api-collection.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)