Elasticsearch(八)结构化查询 Query DSL

目录

1、结构化查询 和 结构化过滤

2、常用查询过滤语句

term 过滤

terms 过滤

range 过滤

exists 和 missing 过滤

bool 过滤

match_all 查询

match 查询

multi_match 查询

bool 查询

3、验证查询

验证一条查询语句是否合法。

查询错误信息

explain 查询语句


1、结构化查询 和 结构化过滤

结构化查询,需要传递 query 参数:

GET /_search
{
    "query": 各种查询参数
}

查询与过滤的差异:

一条过滤语句会询问每个文档的字段值是否包含着特定值:

  • 是否 created 的日期范围在 2013 到 2014 ?
  • 是否 status字段中包含单词 “published” ?
  • 是否 lat_lon 字段中的地理位置与目标点相距不超过 10km?

查询语句会询问每个文档的字段值与特定值的匹配程序如何?

  • 查找与 full text search 这个词语最佳匹配的文档
  • 查找包含单词 run,但是也包含 runs,running,jog 或 其他的文档
  • 同时包含着 quick,brown 和 fox 单词间离得越近,该文档的相关性越高
  • 标识着 Lucene,search 或 java 等标识词越多,该文档的相关性越高。

一条查询语句会计算每个文档与查询语句的相关性,会给出一个相关性评分 _score,并且 按照相关性 对匹配到的文档进行排序。

原则上来说,使用查询语句做全文本搜索或其他需要进行相关性评分的时候,剩下的全部用过滤语句。

2、常用查询过滤语句

term 过滤

term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型):

{"term": {"age": 26}}

terms 过滤

terms 允许指定多个匹配条件。如果某个字段指定了多个值,那么文档需要一起去做匹配。

{"terms": {"age": [26, 27, 28]}}

range 过滤

range 过滤允许我们按照指定范围查找一批数据:

{
    “range”: {
        “age”: {
            “gte”: 20,
            “lt”: 30
        }
    }
}

gt: 大于; gte:大于等于; lt : 小于; lte : 小于等于;

exists 和 missing 过滤

用于查找文档是否包含指定字段或没有某个字段,类似于 SQL 语句中的 IS_NULL 条件

bool 过滤

用来合并多个过滤条件查询结果的布尔逻辑:

must:多个查询条件的完全匹配,相当于 and。

must_not: 多个查询条件的相反匹配,相当于 not;

should:至少有一个查询条件匹配,相当于 or;

match_all 查询

使用 match_all 可以查询到所有文档,是没有查询条件下的默认语句。

match 查询

是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。

multi_match 查询

multi_match 查询允许你做 match 查询的基础上同事搜索多个字段:

bool 查询

bool 查询 与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出匹配成功,而 bool 查询要计算每一个查询子句的 _score (相关性分值)。

must:查询指定文档一定要被包含。

must_not:查询指定文档一定不要被包含。

should:查询指定文档,有则可以为文档相关性加分。

3、验证查询

验证一条查询语句是否合法。

GET /index/type/_validate/query
{
    "query": {
        ...
    }
}

查询错误信息

GET /index/type/_validate/query?explain
{
    "query": {
        ...
    }
}

explain 查询语句

帮助了解查询语句在 ES中是如何执行的:

GET /index/type/_validate/query?explain
{
    "query": {
        ...
    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值