Elasticsearch 5.4 Query DSL

标签: elasticsearchquery
1088人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:812885次
    • 积分:8397
    • 等级:
    • 排名:第2667名
    • 原创:196篇
    • 转载:2篇
    • 译文:6篇
    • 评论:446条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论