1,多个索引
大多数indexAPI支持多个索引操作,如:(1)test1,test2,test3 (2)_all (3)通配符:test*.-test2
多索引API都支持以下url查询字符串参数:
ignore_unavailable | 控制是否忽略任何指定的索引不可用。(true/false) |
allow_no_indices | 控制如果通配符表达式结果没有具体的索引,是否失败。(true/false) |
expand_wildcards | 控制什么样的具体指数通配符指数表达式扩展到。 |
单索引API不支持多索引,如:, 。
2.索引名(index names)中date math的支持
格式:<static_name{date_math_expr{date_format|time_zone}}>
索引名称的数学表达及对应的最终索引名称:当前日期 :2024.03.22
Expression | Resolves to |
---|---|
|
|
|
|
|
|
|
|
|
|
特殊符号URI编码:
< | > | / | { | } | | | + | : | , |
%3C | %3E | %2F | %7B | %7D | %7C | %2B | %3A | %2C |
# GET //_search 执行索引时需要将所有的特殊符号进行URI编码curl -XGET 'localhost:9200/%3Clogstash-%7Bnow%2Fd%7D%3E/_search?pretty' -H 'Content-Type: application/json' -d'{ "query" : { "match": { "test": "data" } }}'
# GET /, , /_searchcurl -XGET 'localhost:9200/%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search?pretty' -H 'Content-Type: application/json' -d'{ "query" : { "match": { "test": "data" } }}'
3.API中的常规操作
?pretty=true | JSON可读格式 |
?format=yaml | yaml可读格式 |
?human=false | 默认为true适合人阅读,false返回计算机结果。eg:"exists_time": "1h" or "size": "1kb"< - > |
date math | |
filter_path 支持通配符 | 减少返回字段,结果中只保留自己关心的字段。eg: curl -XGET 'localhost:9200/_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score&pretty' 结果: { "took" : 3, "hits" : { "hits" : [ { "_id" : "0", "_score" : 1.6375021 } ] }} curl -XGET 'localhost:9200/_cluster/state?filter_path=metadata.indices.*.stat*&pretty' 结果: { "metadata" : { "indices" : { "twitter": {"state": "open"} } }} |
flat_setting=true 返回结果扁平化 默认值为false | curl -XGET 'localhost:9200/twitter/_settings?flat_settings=true&pretty' 结果: { "twitter" : { "settings": { "index.number_of_replicas": "1", "index.number_of_shards": "1", "index.creation_date": "1474389951325", "index.uuid": "n6gzFZTgS664GUfx0Xrpjw", "index.version.created": ..., "index.provided_name" : "twitter" } } } curl -XGET 'localhost:9200/twitter/_settings?flat_settings=false&pretty' { "twitter" : { "settings" : { "index" : { "number_of_replicas": "1", "number_of_shards": "1", "creation_date": "1474389951325", "uuid": "n6gzFZTgS664GUfx0Xrpjw", "version": { "created": ... }, "provided_name" : "twitter" } } }} |
error_trace=true 捕获异常 | curl -XPOST 'localhost:9200/twitter/_search?size=surprise_me&error_trace=true&pretty' 结果: { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "Failed to parse int parameter [size] with value [surprise_me]", "stack_trace": "Failed to parse int parameter [size] with value [surprise_me]]; nested: IllegalArgumentException..."//不然没有这句 } ], "type": "illegal_argument_exception", "reason": "Failed to parse int parameter [size] with value [surprise_me]", "stack_trace": "java.lang.IllegalArgumentException: Failed to parse int parameter [size] with value [surprise_me]\n at org.elasticsearch.rest.RestRequest.paramAsInt(RestRequest.java:175)...", "caused_by": { "type": "number_format_exception", "reason": "For input string: \"surprise_me\"", "stack_trace": "java.lang.NumberFormatException: For input string: \"surprise_me\"\n at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)..." } }, "status": 400} |
4.基于URL的访问控制---------不理解
许多用户使用基于URL访问控制的代理来保护对Elasticsearch索引的访问。对于, 和请求,用户可以选择在URL中指定一个索引,也可以在请求主体中的每个请求中指定一个索引。这可以使基于URL的访问控制具有挑战性。(什么鬼)
为防止用户覆盖URL中指定的索引,请将此设置添加到elasticsearch.yml
文件中:
rest.action.multi.allow_explicit_index:false
默认值是true,但是当设置false为时,Elasticsearch将拒绝在请求正文中指定具有显式索引的请求