ES 查询相关内容的总结

最近两天一直在学习 ES 的相关内容。

 入门级别;

 学习途径:主要是官方文档

 这篇文章主要关注使用ES做查询

 

# # 在我的理解看来,查询有不同的分类形式

 第一种分类:基本查询和组合查询

 第二种分类:打分查询和不打分查询

 这个分类只代表我自己的理解。其实不管怎么分类就是查询,就看我们怎么理解,怎么去使用它的特性,去解决问题。

 

# # 先来将一下 ES 的查询 和 我之前学的SQL查询

  之前习惯使用关系型数据库,所以写查询语句都是: select * from tablename where cloumname="..";

  而在ES 中叫做 DSL(查询表达式),在我的理解看来,其实没什么变化,查询语句还是查询语句,只不过变了一种写法而已,DSL就是一种JSON 格式罢了。不信来看一下:

  这里做一个简单的映射,并不是绝对的说 match 就是 where 

 

# # 再来看一下我前边提到的分类,基本查询

 所谓的节本查询,其实就是一些查询条件

 match 查询 ,这个相当于是 sql 中的 where 并且加模糊的条件  例如:select * from table where name like"张%"

       这个在es 中的例子,就是上边的图片。

 range 查询  ,这个相当于是 sql 中的 where 后边跟着一个范围查询 例如 select * from table where age>20 and age<30

       这个在es 中的查询语句,就是写成了json格式:

   

 term 查询,这个相当于是 sql 中的 where 并且加精确的条件,例如 select * from table where age = 26

   在es中的查询语句就是:

 

 terms 查询,这个相当于是 sql 中的 where 并且in的条件,例如: select * from table where tag in(search,full_text,nosql)

    而在es中

 exists 和 missing 查询 这与SQL中的 IS_NULL (missing) 和 NOT IS_NULL (exists) 在本质上具有共性,例如 select * from table where title  not  IS_NULL 

 

# # 再来看一下我前边提到的分类,组合查询

  这个其实就是,将一些条件进行组合,举个例子,select * from table where name="张三" and age in(15,20,30)

  而在es 里边又是另外一种形式,同时ES 对这些查询进行了增强,我们应该知道ES是可以做相关性查询的,这是和关系数据库最大的区别,也是ES最大的优点之一。所以对查询做了增强。

  在ES 中增加了这些字段:

           must : 必须包含查询内容

           must_not :必须不包含查询内容

           should:最好包含查询内容,包含的越多,得分越多,这个得分和打分查询有关系

           filter : 必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献。

 来看一下ES的组合查询的语句是怎么写的:

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }} 
        }
    }
}

  这一块具体介绍,还是看下官方文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-queries-together.html

 

# #  打分查询和不打分查询

  对于打分不打分这个问题,最主要的还是性能的影响,说白了,不打分查询要比打分查询的性能更好一点。并且对于一些精确查询,其实是完全没有必要打分的。将查询条件移到 filter 语句中,我们将它转成不评分的查询,将不再影响文档的相关性排名。由于它现在是一个不评分的查询,可以使用各种对 filter 查询有效的优化手段来提升性能

  对于打不打分,filter 这个关键字很重要。对于一个组合查询,如果不想打分,则将查询的条件放进 filter 里边即可。

 

  

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值