ES URI查询

通过在url请求地址上拼接查询参数来查询数据,例如/user/_search?q=username:zhangsan查询用户名包含zhangsan的记录,这里的q=username:zhangsan就是es的查询参数,通过传入不同的参数,可以实现很多种不同的查询功能。

这里将查询参数整理如下

参数解释
q查询字符串 ,例如:q=user:zhangsan
dfq中不指定字段时默认查询的字段,如果不指定,es 会查询所有字段
analyzer当分析字符串的时候使用的分词器
lowercase_expanded_terms搜索时忽略大小写标志,默认为true
analyze_wildcard通配符或者前缀查询是否被分析,默认为false
default_operator默认多个条件的关系,AND或者OR,默认为OR
lenient如果设置为true,字段类型转换失败的时候将被忽略,默认为false
explain对于每个命中,包含如何计算命中得分的解释
_source设置为false表示禁用_source字段检索,同时支持_source_include_souce_exclude
sort根据字段名排序,例如fieldName:asc或者fieldName:desc
track_scores排序时,设置为true仍然跟踪分数并将其作为每次点击的一部分返回
timeout超时时间,默认不超时
terminate_after在达到查询执行将提前终止时,为每个分片收集的最大文档数。如果设置,则响应将具有一个布尔字段,terminated_early以指示查询执行是否实际上已终止。默认为no terminate_after
from返回的索引匹配结果的开始值,默认为0
size搜索结果返回的条数,默认为10
search_type搜索的类型,可以是dfs_query_then_fetchquery_then_fetch,默认为query_then_fetch
allow_partial_search_resultsfalse如果请求将产生部分结果,则设置为返回整体故障。默认为true,这将允许在超时或部分失败的情况下获得部分结果

这里说一下q中几个常见的查询方式

布尔操作符

AND&&),OR||),NOT!)这些操作符,需要注意的是必须要大写,不能小写,否则es就把它当做正常的词语来处理。使用方式:name:(tom NOT lee)

+- 分别对应mustmust_not

+ 在 url 中会被解析为空格,所以在使用的时候要encode一下+号,为%2B

name:((lee && !alfred) || (tom && lee && !alfred))
// 错误写法
name:(tom +lee -alfred)

应该写成如下方式

name:(tom %2Blee -alfred)

模糊匹配

使用~符号来实现模糊匹配,例如name:fruit~1表示匹配与fruit相差一个character的词,例如fruits可以正常匹配。

近似度匹配

以term为单位进行差异比较,例如:"quick fox"~5,它表示准许匹配与quick fox相差5个单位的内容,比如"quick fox""quick brown fox"都会被匹配。

本文整理自网络

如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注