关闭

Elasticsearch 5.4 Query DSL

标签: elasticsearchquery
1425人阅读 评论(0) 收藏 举报
分类:

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

1
0
查看评论

Elasticsearch——Query DSL

概述 查询context与过滤context 查询上下文 过滤上下文 示例 Match All Query Match All Query Match None Query 全文检索 Full text queries Match Query匹配查询 match Fuzziness zero ter...
  • bigbigtree911
  • bigbigtree911
  • 2016-11-26 18:33
  • 2729

Elasticsearch(入门篇)——Query DSL与查询行为

http://www.cnblogs.com/miqi1992/p/5708553.html ES提供了丰富多彩的查询接口,可以满足各种各样的查询要求。更多内容请参考:ELK修炼之道 Query DSL结构化查询 Query DSL是一个Java开源框架用于构建...
  • zdy0_2004
  • zdy0_2004
  • 2016-07-26 21:36
  • 4171

Elasticsearch的javaAPI之query dsl-queries

Elasticsearch的javaAPI之query dsl-queries 和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl。 查询建造者(factory)是 QueryBuilders 。 一旦准备好您的查询,您可以使用...
  • woshiyexinjie
  • woshiyexinjie
  • 2014-11-20 20:48
  • 1767

Elasticsearch(8)实践四-使用特定域语言查询(Query DSL)

导语 特定域查询语言 实践-DSL语言查询例子 结语导语用于特定的搜索时从命令行查询字符串搜索是十分方便的,但它有其局限性(见 Elasticsearch(7)实践三-简单检索 )。Elasticsearch提供了丰富、灵活的查询语言,我们称之为DSL-允许我们建立更加复杂的、健壮的查询。特定域查询...
  • YuYunTan
  • YuYunTan
  • 2016-09-18 20:01
  • 1357

ElasticSearch的 Query DSL 和 Filter DSL

Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。  Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL(query DSL)和过滤DSL(filter DSL)。 它们两个的区别如下图...
  • z69183787
  • z69183787
  • 2017-04-12 10:41
  • 877

Query DSL for elasticsearch Query

Query DSL Query DSL (资料来自: http://www.elasticsearch.cn/guide/reference/query-dsl/) --简介-- elasticsearch 提供基于JSON的完整的Query DSL查询表达式(DSL即领域专用语言). 一般来说...
  • huwei2003
  • huwei2003
  • 2014-11-06 17:24
  • 24117

Elasticsearch DSL查询

原文:http://www.yiibai.com/elasticsearch/elasticsearch_query_dsl.html 在Elasticsearch中,通过使用基于JSON的查询进行搜索。 查询由两个子句组成 - 叶查询子句 - 这些子句是匹配,项或范围的,它们在特定字...
  • u013063153
  • u013063153
  • 2017-07-13 15:50
  • 237

Elasticsearch的DSL之比较重要的几个查询语句

1.  match_all  { "match_all": {}} 匹配所有的, 当不给查询条件时,默认。 2. match 进行full text search或者exact value(非string字段或not_analyzed的字段),...
  • smithallenyu
  • smithallenyu
  • 2016-04-21 17:06
  • 3880

elasticsearch:Query DSL

elasticsearch 提供基于JSON的完整的Query DSL查询表达式(DSL即领域专用语言). 一般来说, 普通的查询如 term 或者 prefix. 另外还有混合查询如 bool 等. 另外查询表达式(Queries)还能够关联特定的过滤表达式,如 filtered 或者 const...
  • zhuzhenyu307
  • zhuzhenyu307
  • 2014-07-17 14:18
  • 567

ES参考之Query DSL

https://www.elastic.co/guide/en/elasticsearch/reference/2.1/query-dsl.html ES因搜索而生,主要工作就是处理查询,返回结果。ES提供了基于JSON的query DSL查询语言,有两种类型子句: 1. Leaf query。...
  • slml08
  • slml08
  • 2017-01-03 16:42
  • 6254
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:935752次
    • 积分:9246
    • 等级:
    • 排名:第2379名
    • 原创:209篇
    • 转载:2篇
    • 译文:6篇
    • 评论:468条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论