Elasticsearch——Query DSL

概述

Elasticsearch提供基于Json的查询功能,将DSL查询看做AST树的话,包含两种子句类型:
+ Leaf query clauses:叶子节点的查询子句,主要用于检索特定字段的特定值,例如match、term、range查询。这些子句可以嵌套自己。
+ Compound query clauses:复合子句,用于组合多个叶子查询子句,形成逻辑,例如bool或者dis_max查询,或者行为修改(例如constant_score查询)
查询子句在query上下文与filter上下文表现有所区别。

查询context与过滤context

查询上下文

查询上下文中的查询子句,用于计算文档与该查询的相似程度,同时计算_score用于衡量相似度。当查询子句放入query中时,此时该查询子句就处于查询上下文中。例如:

{
    "query": {
        "match" :{
                "message": "test"
                       }
                    }
}

过滤上下文

过滤上下文中的查询子句主要解决“这个文档是否符合这个查询子句”,其结果不是相似度,结果只有“是”或者“否”。过滤想下雨主要用于过滤数据,例如
+ 年龄是否大于18岁
+ 状态是否是正常
大量使用过滤上下文时,过滤查询会被ES自动缓存,加速性能。当查询子句放入“filter”参数中时,会被置于过滤环境中,例如bool查询中的filter或者must_not、constant_score中的filter参数以及聚集中的filter,都是过滤上下文环境。具体过滤如何缓存,会单独介绍。

示例

总结:将影响文档相似度计算的查询,放入query上下文中,将其他的查询放入filter的上下文中。
这里写图片描述
1. 查询参数,表示查询上下文
2. bool查询,其中两个match查询子句(3和4),位于查询上下文中,用于计算匹配程度
5. 过滤参数,表示过滤上下文
6. 过滤上下文中的term查询,用于过滤数据
7. 过滤上下文中的range擦好像,用于过滤数据

Match All Query

Match All Query

最简单的查询:匹配所有文档,对每个文档打分_score为1.0,相当于关系数据库中的select * from table

curl -XGET 'localhost:9200/_search?pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'

如果对于某个查询条件,希望更改其计算_score的权重,可以使用boost参数:

curl -XGET 'localhost:9200/_search?pretty' -d'
{
    "query": {
        "match_all": { "boost" : 1.2 }
    }
}'

Match None Query

与全检索相反,可以使用match_none,不匹配任何文档

curl -XGET 'localhost:9200/_search?pretty' -d'
{
    "query": {
        "match_none": {}
    }
}'

全文检索

全文搜索两个最重要的方面是:

  • 相关(relevance):相关是将查询到相关的文档结果进行排名的一种能力,这种相关度可以是根据TF/IDF、地理位置相似性(geolocation)、模糊相似,或者其他的一些算法得出。

  • 分析(analysis):将一个文本块转换为唯一的、规范化的token的过程,目的是为了(a)创建反向索引以及(b)查询反向索引。

当我们提到相关与分析的时候,我们已经身处查询上下文之中,而不是过滤。

Full text queries

高层级的全文检索,通常会对文本的整体内容进行分析查询。在检索前会使用每个字段的analyzer对查询字段进行分词。
+ 如果我们用它来查询 时间(date) 或 整数(integer),他们会将查询字符串用分别当作 时间 和 整数。
+ 如果查询一个准确的(未分析过的 not_analyzed)字符串字段,它会将整个查询字符串当成一个术语。
+ 但

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值