ES URI查询
通过在url请求地址上拼接查询参数来查询数据,例如/user/_search?q=username:zhangsan
查询用户名包含zhangsan
的记录,这里的q=username:zhangsan
就是es的查询参数,通过传入不同的参数,可以实现很多种不同的查询功能。
这里将查询参数整理如下
参数 | 解释 |
---|---|
q | 查询字符串 ,例如:q=user:zhangsan |
df | q 中不指定字段时默认查询的字段,如果不指定,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_fetch 、query_then_fetch ,默认为query_then_fetch |
allow_partial_search_results | false 如果请求将产生部分结果,则设置为返回整体故障。默认为true ,这将允许在超时或部分失败的情况下获得部分结果 |
这里说一下q
中几个常见的查询方式
布尔操作符
像AND
(&&
),OR
(||
),NOT
(!
)这些操作符,需要注意的是必须要大写,不能小写,否则es就把它当做正常的词语来处理。使用方式:name:(tom NOT lee)
。
+
和-
分别对应must
和must_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"
都会被匹配。
本文整理自网络
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=2546