查看“ElasticSearch查询:query查询语法”的源代码
←
ElasticSearch查询:query查询语法
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:ElasticSearch]] == 关于 == query子句主要用于编写'''查询条件''',类似 SQL 中的 where 语句。 == 匹配单个字段 == (通过 '''match''' 实现'''全文搜索''') 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "match": { "{FIELD}": "{TEXT}" } } } </syntaxhighlight> 其中: * {FIELD}:需要匹配的字段名; * {TEXT}:需要匹配的内容; 示例:article索引中,title字段匹配“ES教程”的所有文档。 <syntaxhighlight lang="java" highlight=""> GET /article/_search { "query": { "match" : { "title" : "ES教程" } } } </syntaxhighlight> * 如果 title 字段的数据类型是 text 类型,搜索关键词会进行分词处理。 == 精确匹配单个字段('''term''') == 如果想要类似 SQL 语句中的等值匹配,不需要进行分词处理,只要精确匹配,可以通过 '''term''' 实现精确匹配 : 例如:订单号、手机号、时间字段。 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "term": { "{FIELD}": "{VALUE}" } } } </syntaxhighlight> 其中: * {FIELD}:需要匹配的字段名; * {VALUE}:需要匹配的内容,'''除了 TEXT 类型字段以外的任意类型'''。 示例:搜索订单号order_no = "202003131209120999"的文档 <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "term": { "order_no": "202003131209120999" } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where order_no = "202003131209120999" </syntaxhighlight> == 通过 terms 实现SQL的 in 语句 == 如果我们要实现 SQL 中的 '''in''' 语句,一个字段包含给定数组中的任意一个值就匹配。 语法: <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "terms": { "{FIELD}": ["{VALUE1}","{VALUE2}"] } } } </syntaxhighlight> 其中: * {FIELD}:需要匹配的字段名 * {VALUE1}, {VALUE2} .... {VALUE N}:需要匹配的内容,'''除了 TEXT 类型字段以外的任意类型'''。 示例:搜索order_v2索引中,shop_id字段,只要包含[123,100,300]其中一个值,就算匹配。 <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "terms": { "shop_id": [123,100,300] } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where shop_id in (123,100,300) </syntaxhighlight> == 范围查询('''range''') == 通过 '''range''' 实现范围查询,类似SQL语句中的 >, >=, <, <= 表达式。 常用范围参数如下: * '''gt''':大于 ( > ) * '''gte''':大于且等于 ( >= ) * '''lt''':小于 ( < ) * '''lte''':小于且等于 ( <= ) 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "range": { "{FIELD}": { "gte": 10, "lte": 20 } } } } </syntaxhighlight> 其中: * {FIELD}:字段名 * gte 范围参数:等价于 >= * lte 范围参数:等价于 <= * 范围参数可以只写一个,例如:仅保留 "gte": 10, 则代表 FIELD字段 >= 10 示例:查询order_v2索引中,shop_id >= 10 且 shop_id <= 200的文档 <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "range": { "shop_id": { "gte": 10, "lte": 200 } } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where shop_id >= 10 and shop_id <= 200 </syntaxhighlight> == bool组合查询('''must'''、'''must_not'''、'''should''') == 使用 '''bool''' 语句组合多个字段的查询条件。 === 基本语法结构 === 在 ES 中 bool 查询就是用来'''组合布尔查询条件'''。 * 布尔查询条件,就是类似 SQL 中的 and (且)、or (或)。 bool语法结构: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "bool": { // bool查询 "must": [], // must 条件,类似SQL中的 and, 代表【必须匹配条件】 "must_not": [], // must_not 条件,跟 must 相反,【必须不匹配条件】 "should": [] // should 条件,类似SQL中 or, 代表【匹配其中一个条件】 } } } </syntaxhighlight> * 可以任意选择 '''must'''、'''must_not''' 和 '''should''' 条件的参数都是一个数组,意味着他们都支持设置多个条件。 === must === 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "bool": { "must": [ {匹配条件1}, {匹配条件2}, ...可以有N个匹配条件... ] } } } </syntaxhighlight> 示例: <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "bool": { "must": [ { "term": {"order_no": "202003131209120999"} }, { "term": {"shop_id": 123} } ] } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where order_no="202003131209120999" and shop_id=123 </syntaxhighlight> === must_not === (must_not 表示的是 NOT...AND...NOT) 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "bool": { "must_not": [ {匹配条件1}, {匹配条件2}, ...可以有N个匹配条件... ] } } } </syntaxhighlight> 示例: <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "bool": { "must_not": [ { "term": { "shop_id": 1 } }, { "term": { "shop_id": 2 } } ] } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where shop_id != 1 and shop_id != 2 </syntaxhighlight> === should === 语法: <syntaxhighlight lang="java" highlight=""> GET /{索引名}/_search { "query": { "bool": { "should": [ {匹配条件1}, {匹配条件2}, …可以有N个匹配条件… ] } } } </syntaxhighlight> 示例: <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "bool": { "should": [ { "match": { "order_no": "202003131209120999" } }, { "match": { "order_no": "22222222222222222" } } ] } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where order_no="202003131209120999" or order_no="22222222222222222" </syntaxhighlight> === 综合示例 === 示例: <syntaxhighlight lang="java" highlight=""> GET /order_v2/_search { "query": { "bool": { "should": [ { "bool": { "must": [ { "term": { "order_no": "2020031312091209991" } }, { "range": { "shop_id": { "gte": 10, "lte": 200 } } } ] } }, { "terms": { "tag": [ 1, 2, 3, 4, 5, 12 ] } } ] } } } </syntaxhighlight> 类似SQL语句: <syntaxhighlight lang="sql" highlight=""> select * from order_v2 where (order_no='202003131209120999' and (shop_id>=10 and shop_id<=200)) or tag in (1,2,3,4,5) </syntaxhighlight>
返回至“
ElasticSearch查询:query查询语法
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息