前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elastic Search实战-Search API

Elastic Search实战-Search API

作者头像
JavaEdge
发布2021-02-22 16:20:32
9900
发布2021-02-22 16:20:32
举报
文章被收录于专栏:JavaEdgeJavaEdge

1 Search API简介

实现对 ES 中存储的数据进行查询,endpoint 为 _search

代码语言:javascript
复制
//查询全部
GET /_search 

// 指定单个索引查询
GET /my_index/_search 

// 指定多个索引查询
GET /my_index1,my_index2/_search 

// 通配符查询
GET /my_*/_search 

查询形式

URI Search

方便通过命令行测试,仅能包含 es 提供的部分查询语法。

代码语言:javascript
复制
GET /my_index/_search?q=user:java

Request Body Search

es 提供的完备查询语法 Query DSL (Domain Specfic Language)

代码语言:javascript
复制
GET /my_index/_search
{
	"query":{
		"term":{"user":"seina"}
	}
}

2 URL Search

通过 url query 参数来实现搜索,常用参数:

  • q 指定查询的语句,语法为 Query String Syntax
  • df(default field) q 中不指定字段时,默认查询的字段,如果不指定,es 会查询所有字段
  • sort 排序
  • timeout 指定超时时间,默认不超时
  • from,size 用于分页

案例

查询 user 字段包含 java 的文档,结果按照 age 升序排列,返回第 5~15 个文档。若超过 1s 没有结束,则以超时结束。

代码语言:javascript
复制
GET /my_index/_search?q=java&df=user&sort=age:asc&from=4&size=10&timeout=1s

3 Query String Synax

3.1 term 与 phrase

代码语言:javascript
复制
// 表示 java 或 gao,只包含某一个就符合查询需求
java gao

// 表示词语查询,要求先后顺序,必须是 java gao 连起来
"java gao"

3.2 泛查询

  • 不指定字段查询,而是在所有字段中匹配 term
  • 还可指定字段查询, 语法 《 字段名:要查询的值 》

3.3 Group 分组设定

使用括号指定匹配的优先级规则。

表示必须先判断前面括号里的,再判断后面的

代码语言:javascript
复制
(quick OR brown) AND fox 

表示 status 字段的值是 active 或者 pending。如果不加括号,status:active OR pending 表示 status 字段的值是 active 或者全部字段的值是 pending。因为 es 如果不指定字段,可能会按全部字段去匹配。

代码语言:javascript
复制
status:(active OR pending) title:(full text search)

3.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))

3.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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Search API简介
    • 查询形式
      • URI Search
      • Request Body Search
  • 2 URL Search
    • 案例
    • 3 Query String Synax
      • 3.1 term 与 phrase
        • 3.2 泛查询
          • 3.3 Group 分组设定
            • 3.4 布尔操作符
              • 3.5 范围查询
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档