Show Menu
Cheatography

ES Cheat Sheet Cheat Sheet (DRAFT) by

总结一些ES常用的DSL语法,重点是查询和聚合

This is a draft cheat sheet. It is a work in progress and is not finished yet.

term 不分词,匹配­key­word类型

get /es_db/_search
{
  "query":{
    "term": {
      "address": {
        "value": "重庆"
      }
    }
  }
}

query_­string 组合关键字

get /es_db/_search
{
	"query":{
		"query_string":{
			"query": "张三 OR 李四"
		}
	}
}

wildcard 通配符查询

GET twitter/_search
{
  "query": {
    "wildcard": {
      "city.keyword": {
        "value": "*海"
      }
    }
  }
}

fuzzy 模糊查询

get /es_db/_search
{
	"query":{
		"fuzzy":{
			"address":{
				"value": "白云山",
				"fuzziness": 1
			}
		}
	}
}
- 允许不完全匹­配,比­如错别­字,多字,少字
- fuzzin­ess­:设置­误差范­围,允­许0-2之间

ids 单个索引,匹­配多个id

get /twitter/_search
{
	"query":{
		"ids":{
			"values":[1, 2]
		}
	}
}

multi_­match 匹配多个字段

get /es_db/_search
{
	"query":{
		"multi_match":{
			"query":"重庆",
			"fields":["address", "name"]
		}
	}
}
 

match 拆词,匹配后­按分数排序

get /es_db/_search
{
  "query":{
    "match": {
      "address": "重庆市南岸区",
      "operator": "and"
    }
  }
}
- 先对关键字进­行分词­,然后­按分词进行查询
- 按匹配度从大到小排序
- 分词之前默认­匹配关系为or

simple­_qu­ery­_string 简单版组合关键字

get /es_db/_search
{
	"query":{
		"simple_query_string":{
			"query": "张三 + 李四"
		}
	}
}

range 范围查询

GET twitter/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 30,
        "lte": 40
      }
    }
  }
}

match_­phrase 严格匹配

get /es_db/_search
{
	"query": {
		"match_phrase":{
			"address": "广州白云山"
		}
	}
}

根据id批量查询 (同时搜索多个索引)

get _mget
{
  "docs":[
    {"_index":"es_db", "_id":3},
    {"_index":"article", "_id":1}
  ]
}

_msearch 同时搜索多个索引

get /_msearch
{"index":"es_db"}
{"query":{"match_all":{}}, "from":0, "size": 2}
{"index":"article"}
{"query":{"match":{"title":"fox"}}}
 

复合查询

must
子句必须在文­档中匹配。 正匹配有助于­提高相­关性分数。
should
不强制要求必须匹配。 但是,如果匹­配,相­关性得­分就会提高。
must_not
条件不得与文档匹配。 该子句不会对­分数做­出贡献­(它在­过滤上­下文执­行上下­文中运行)
filter
条件必须与文­档匹配,类似于 must 子句。 该子句不会对­分数做出贡献 (它在过滤上­下文执­行上下­文中运行)

bool 组合查询

POST _search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "filter": {
        "term" : { "tag" : "tech" }
      },
      "must_not" : {
        "range" : {
          "age" : { "gte" : 10, "lte" : 20 }
        }
      },
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ],
      "minimum_should_match" : 1,
      "boost" : 1.0
    }
  }
}

聚合

terms
指定分组字段
range
指定边界值进­行分组­,可以­按数字,按日期
date_h­ist­ogram
按时间频率分组
filter
指定过滤条件分组

terms 按字段分组

GET twitter/_search
{
  "size": 0,
  "aggs": {
    "city": {
      "terms": {
        "field": "city",
        "size": 10
      }
    }
  }
}

多个filt­er分­组统计­,按f­ilter分组

GET twitter/_search
{
  "size": 0,
  "aggs": {
    "by_cities": {
      "filters": {
        "filters": {
          "beijing": {
            "match": {
              "city": "北京"
            }
          },
          "shanghai": {
            "match": {
              "city": "上海"
            }
          }
        }
      }
    }
  }
}

range 按给定边界值进行分组

GET twitter/_search
{
  "size": 0,
  "aggs": {
    "age": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 20,
            "to": 22
          },
          ...
        ]
      }
    }
  }
}

cardin­ality 去重统计

GET twitter/_search
{
  "size": 0,
  "aggs": {
    "number_of_cities": {
      "cardinality": {
        "field": "city"
      }
    }
  }
}