Elasticsearch的查询
查询方式:
1. URL Search
2. Request Body Search
在执行搜索时,搜索请求将广播到所有的索引分片(分片副本之间循环查找)
如果提供routing参数,可控制搜索哪些分片。
POST /twitter/_doc?routing=kimchy { "user":"kimchy", "postDate":"2019-11-05", "message":"trying out Elasticsearch" } GET /twitter/_search?routing=kimchy { "query": { "term": { "user": { "value": "kimchy" } } } } { "took": 1, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.2876821, "hits": [ { "_index": "twitter", "_type": "_doc", "_id": "qLSaOm4BDE4t6YNu7VC4", "_score": 0.2876821, "_routing": "kimchy", "_source": { "user": "kimchy", "postDate": "2019-11-05", "message": "trying out Elasticsearch" } } ] } } GET /twitter/_search { "query": { "term": { "user": { "value": "kimchy" } } } } "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }
1. URL Search
URI不支持所有的搜索选项, 但可用于方便快速的测试。
参数说明:
q:查询字符串,query_string查询。
df:在查询中未定义字段前缀时默认使用的字段。
analyzer: 分析查询字符串时使用的分析器名称。
default_operator: 默认的操作符, 可以是AND或OR, 默认是OR。
batched_reduce_size:在协调节点(Coordinating Node)上每次reduce的分片结果数。如果请求中的分片的数量很大, 则应设置此值作为保护机制, 以减少每个搜索请求的内存开销。
lenient: 如果设置为true, 格式错误(例如数值类型的字段, 提供了text格式)的失败将被忽略, 默认为false。
analyze_wildcard:是否分析通配符和前缀查询, 默认为false。
terminate_after: 每个文档收集的最大数量, 当达到这个数量时, 查询执行将提前终止。当设置了此参数, 响应的body将具有布尔字段terminated_early用于标识查询执行是否实际终止了。 默认没有设置此参数。
explain:对每个命中的记录, 包含一个explaination, 关于命中的得分是如何计算的。
_source: 设置为false, 禁用_source字段的检索。 也可以使用_source_include &_source_exclude 检索部分文档。
stored_fields: 控制哪些stored字段作为解释的文档的一部分返回。
routing: 控制路由。
parent: 同routing
preference: 控制查询在哪个分片上执行。
source: 允许将请求的数据放入url的查询字符串中。
sort: 排序, 既可以是fileName的形式, 也可以是
fieldName:asc/fieldName:desc。 fieldName:asc既可以是文档中的实际字段名, 也可以是特殊的_score字段(用于表示基于得分的排序)。可指定多个排序参数。
track_scores:当设置为true, 排序时track得分, 并作为hit的一部分返回。
track_total_hits:当设置为false, 禁用track匹配查询的命中的总记录数。
timeout: 搜索超时, 将搜索限制在指定的时间内执行, 当超期时返回这个点累计的命中数。timeout默认使用Search Cancellation 机制在超时后取消搜索请求。默认无超时。
from: 从某个偏移量检索命中的文档, 默认为0.
size: 要返回的记录数, 默认为10。 如果不关心命中的记录, 但只关心匹配的数量或者聚合,将此值设置为0将有助于提高性能。
search_type: 执行搜索操作的类型。 可以是dfs_query_then_fetch或query_then_fetch,默认为query_then_fetch。
allow_partial_search_results:默认为true, 在超时或部分失败的情况返回部分结果。 如果设置为false, 当请求产生部分结果, 将整体返回失败
2. Request Body Search
Request Boby Search使用search DSL(包括查询DSL)在body里面执行搜索 .。