Elasticsearch Search API - URL Search
一、了解 Search API实现对 es 中存储的数据进行查询,endpoint 为 _search,如下所示://查询全部GET /_search//指定单个索引查询GET /my_index/_search//指定多个索引查询GET /my_index1,my_index2/_search//通配符查询GET /my_*/_search查询主要由两种形式...
·
一、了解 Search API
实现对 es 中存储的数据进行查询,endpoint 为 _search,如下所示:
//查询全部
GET /_search
//指定单个索引查询
GET /my_index/_search
//指定多个索引查询
GET /my_index1,my_index2/_search
//通配符查询
GET /my_*/_search
查询主要由两种形式
- URI Search:方便通过命令行测试,仅能包含 es 提供的部分查询语法
GET /my_index/_search?q=user:seina
- Request Body Search:es 提供的完备查询语法 Query DSL (Domain Specfic Language)
GET /my_index/_search
{
"query":{
"term":{"user":"seina"}
}
}
二、URL Search
通过 url query 参数来实现搜索,常用参数如下:
- q:指定查询的语句,语法为 Query String Syntax
- df(default field):q 中不指定字段时,默认查询的字段,如果不指定,es 会查询所有字段
- sort:排序
- timeout:指定超时时间,默认不超时
- from,size:用于分页
举例说明:
//查询 user 字段包含 seina 的文档,结果按照 age 升序排列,返回第 5~15 个文档
//如果超过 1s 没有结束,则以超时结束
GET /my_index/_search?q=seina&df=user&sort=age:asc&from=4&size=10&timeout=1s
Query String Synax
1)term 与 phrase
//表示 seina 或 gao,只包含某一个就符合查询需求
seina gao
//表示词语查询,要求先后顺序,必须是 seina gao 连起来才可以
"seina gao"
2)泛查询:表示不指定字段查询,而是在所有字段中匹配 term;还可以 指定字段查询, 语法是:《 字段名:要查询的值 》
3)Group 分组设定, 使用括号指定匹配的优先级规则
//表示必须先判断前面括号里的,再判断后面的
(quick OR brown) AND fox
//表示 status 字段的值是 active 或者 pending
//如果不加括号,status:active OR pending 表示 status 字段的值是 active 或者全部字段的值是 pending
//因为 es 如果不指定字段,可能会按全部字段去匹配
status:(active OR pending)
4)布尔操作符
- AND( && )、OR( || )、NOT( ! )注意只能大写
//可以包含 tom 但不要有 lee
username:(tom NOT lee)
- 加号➕:must 表示注意➕在 url 中会被解析成空格,要使用 encode 后的结果,就是 %2B
- 减号➖:must_not
//下面两个都表示可以包含 tom,一定包含 lee,也一定不包含 seina
//由此可见 ➕➖可以简化查询语句写法
username:(tom +lee -seina)
username:((lee && !seina) || (tom && lee && !seina))
5)范围查询
- 区间写法:闭区间用 [],开区间用 {}
age:[1 TO 10] //表示 1 <= age <= 10
age:{1 TO 10} //表示 1 <= age < 10
age:[1 TO ] //表示 age >= 10
age:[* TO 10] //表示 age <= 10
- 算数符号写法:>=、<=
age:>= 1
age:(>= 1 && <= 10) 或者 age:(+ >= 10 + <= 10)
6)通配符查询
?代表一个字符,* 代表 0 个或多个字符
name:t?m
name:tom*
通配符匹配执行效率低,且占用较多内存,不建议使用,如无特殊需求,不要将 ?或者 * 放在前面
7)模糊匹配
name:roam~1 //表示匹配与 roam 差 1 个 character 的词,比如 foam roams 等
8)近似度查询
//以 term 为单位进行差异比较,允许在 quick 和 fox 之间插入一个词,比如 “quick fox”“quick brown fox” 都会被匹配
"quick fox"~1
如需了解 Request Body Search,请点击上文 Elasticsearch Search API - Request Body Search
更多推荐
已为社区贡献2条内容
所有评论(0)