Elasticsearch 5.4 Query DSL

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch提供了丰富的查询语句DSL,查询可分2类:Leaf Query:查询特定字段特定值的查询,可以单独使用,比如match查询、term查询、range查询。

Elasticsearch提供了丰富的查询语句DSL,查询可分2类:

  1. Leaf Query:查询特定字段特定值的查询,可以单独使用,比如match查询、term查询、range查询。
  2. Compound Query:组合查询,组合多个简单查询或者特殊查询。

    先占坑,有时间更新Y(^_^)Y

一、Query和Filter的区别

Query是真正的信息检索,会用到检索模型进行评分,回答的是查询和文档的匹配程度;Filter是过滤机制,回答的是Yes Or NO。

二、Match All Query

match all query会返回所有文档,文档的得分都是1。

GET /_search
{
    "query": {
        "match_all": {}
    }
}

也可以通过boost参数修改得分:

GET /_search
{
    "query": {
        "match_all": { "boost" : 1.2 }
    }
}

match_none是match_all的取反,不返回任何文档:

GET /_search
{
    "query": {
        "match_none": {}
    }
}

三、Full Text Query(全文查询)

3.1 match query

GET /_search
{
    "query": {
        "match" : {
            "message" : "this is a test"
        }
    }
}

message是被搜索字段,this is a test是query内容,分词后query中的任何一个关键字被匹配文档就会被搜索到。如果想查询匹配所有关键词的文档,可以用and操作符连接:

GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "this is a test",
                "operator" : "and"
            }
        }
    }
}

3.2 match phrase query

match phrase query首先会把query内容分词,分词器可以自定义,同时文档还要满足以下两个条件才会被搜索到:

  1. 分词后到所有词项都要出现在该字段中
  2. 字段中到词项顺序要一致

    例如,有三个文档:

{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

使用match_phrase查询”hello world”:

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

只有前2个文档会被匹配。

3.3 match phrase prefix query

match_phrase_prefix和match_phrase类似,只不过match_phrase_prefix支持最后一个term前缀匹配:

GET /_search
{
    "query": {
        "match_phrase_prefix" : {
            "message" : "quick brown f"
        }
    }
}

3.4 multi match query

multi_match是match的升级,用于搜索多个字段:

GET books/_search
{
  "query": {
    "multi_match" : {
      "query":    "java虚拟机", 
      "fields": [ "title", "description" ],
      "operator" : "and"
    }
  }
}

字段的名称可以使用通配符:

GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "Will Smith",
      "fields": [ "title", "*_name" ] 
    }
  }
}

同时,也可以用指数符指定权重:

GET /_search
{
  "query": {
    "multi_match" : {
      "query" : "this is a test",
      "fields" : [ "subject^3", "message" ] 
    }
  }
}

3.5 common terms query

3.6 query string query

3.7 simple query string query

四、Term Level Query(term级别查询)

4.1 term query

4.2 terms query

4.3 range query

4.4 exists query

4.5 prefix query

4.6 wildcard query

4.7 regexp query

4.8 fuzzy query

4.9 type query

4.10 ids query

五、Compound Query(组合查询)

5.1 constant score query

5.2 bool query

5.3 Dis max query

5.4 Function Score query

5.5 boosting query

5.6 indices query

六、Joining Query(嵌套查询)

6.1 nested query

6.2 has child query

6.3 has parent query

6.4 parent id query

七、Geo Query(地理位置查询)

geoshape query

geo bounding query

geo distance query

geo distance range query

geo polygon query

八、Specialized Query(特殊查询)

8.1 more like this query

8.2 template query

8.3 script query

8.4 percolate query

九、Span Query

9.1 span term query

9.2 span multi term query

9.3 span first query

9.4 span near query

9.5 span or query

9.6 span not query

9.7 span containing query

9.8 span within query

9.9 span field masking query

十、minimum should match

十一、multi term query rewrite

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
Web App开发 自然语言处理 API
巧记Elasticsearch常用DSL语法
记知识先记轮廓,关于DSL语法的轮廓,记住以下3句话即可:1.索引、文档和查询。2.Match、Term和Bool。3.还有翻页和聚合
巧记Elasticsearch常用DSL语法
|
2月前
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
4月前
|
存储 数据库 索引
面试题ES问题之动态映射的定义如何解决
面试题ES问题之动态映射的定义如何解决
36 1
|
6月前
|
SQL Java 关系型数据库
spring data elasticsearch 打印sql(DSL)语句
spring data elasticsearch 打印sql(DSL)语句
435 0
|
JSON 自然语言处理 数据格式
分布式系列教程(33) -ElasticSearch DSL语言查询与过滤
分布式系列教程(33) -ElasticSearch DSL语言查询与过滤
196 0
|
存储 JSON 物联网
【Elasticsearch】学好Elasticsearch系列-Query DSL 1
【Elasticsearch】学好Elasticsearch系列-Query DSL
107 0
|
6月前
|
自然语言处理 索引
Elasticsearch之常用DSL语句
mapping是对索引库中文档的约束
112 1
|
6月前
|
JSON 自然语言处理 算法
【Elasticsearch】DSL查询文档
【Elasticsearch】DSL查询文档
386 0
|
6月前
|
Java 索引
ElasticSearch DSL操作
ElasticSearch DSL操作
110 1
|
6月前
dsl语句查询elasticsearch集群节点分布和资源使用情况
dsl语句查询elasticsearch集群节点分布和资源使用情况
151 0