教你快速从SQL过度到Elasticsearch的DSL查询

本文旨在帮助熟悉SQL的开发者快速过渡到Elasticsearch的DSL查询。介绍了bool、should、must、must_not、term、terms、range、exist、match等概念及其与SQL的对应关系,通过实例解析常见查询场景,解答match与term的区别,query与filter的使用,以及filtered与filter的变迁。
摘要由CSDN通过智能技术生成

前言

Elasticsearch太强大了,强大到跟python一样,一种查询能好几种语法。
其实我们用到的可能只是其中的一部分,比如:全文搜索。
我们一般是会将mysql的部分字段导入到es,再查询出相应的ID,再根据这些ID去数据库找出来。

问题来了:数据导入到es后,很多人都要面对这个es的json查询语法,也叫DSL,如下

于是一堆新词来了,比如:filter、match、multi_match、query、term、range,容易让没学过的人抵触。

如果正常开发业务的程序员,只关心原先怎么用sql查询出来的数据,在es中查询出来。
sql查询定位,一般常用的是:=、!=、>、<、and、or、in、between等等。

举个例子,原先sql查询一商品是这样的

SELECT * FROM goods WHERE spu_id = "wp123" OR ( spu_id = "wp345" AND min_price = 30 ) 

对应到es是

{
	"query": {
		"bool": {
			"should": [{
					"term": {
						"spu_id": "wp123"
					}
				},
				{
					"bool": {
						"must": [{
								"term": {
									"spu_id": "wp345"
								}
							},
							{
								"term": {
									"min_price": 30
								}
							}
						]
					}
				}
			]
		}
	}
}

sql和dsl是有一定对应关系的,下面把一些常用的总结下,让不熟悉es的童鞋能丝滑能从sql过度

以下内容由chenqionghe倾情提供

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值