ElasticSearch DSL查询语法

ES中的查询分为URI Search、Request Body Search,DSL语句就是基于Request Body Search查询类型的。

  • URI Search - 在URL中使用查询参数。
  • Request Body Search - 使用JSON格式的入参作为查询条件。

查询索引相关的用法

  • /_search 搜索
  • /_count 统计数量
  • /index1/_search index1索引
  • /index1,index2/_search index1和index2索引
  • /index*/_search 以index开头的索引
DSL查询

基础语法

// 搜索
GET /indexName/_search
{
  "query": {
    "查询类型": {
      "查询条件": "条件值"
    }
  }
}
// 统计数量
GET /indexName/_count
{
  "query": {
    "match_all": {}
  }
}

模糊匹配

match查询:全文检索的一种,会对用户输入的内容分词,然后去倒排索引库检索

GET /indexName/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

精确查询

  • term:根据词条精确值查询
  • range:根据值的范围查询
// term查询
GET /indexName/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}
// range查询
GET /indexName/_search
{
  "query": {
    "range": {
      "FIELD": {
        //大于等于
        "gte": 10,
        //小于等于
        "lte": 20
      }
    }
  }
}

布尔查询

布尔查询是一个或者多个查询子句的组合

  • must:必须匹配每个子查询,类似“与”,
  • should:选择性匹配子查询,类似“或”,
  • must_not:必须不匹配,类似“非”不参与算分
  • fiter:必须不匹配,不参与算分
#布尔查询
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "如家"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gt": 400
            }
          }
        }
      ],
      "filter": [
        {
          "geo_distance": {
            "distance": "10km",
            "location": "31.21,121.51"
          }
        }
      ]
    }
  }
}

聚合查询

聚合必须的三要素:聚合名称、聚合类型、聚合字段
聚合类型分为:

  • avg:求平均值
  • max:求最大值
  • min:求最小值
  • sum:求和
  • stats:同时求max、min、avg、sum等
GET /hotel/_search
{
  "size": 0, 
  "aggs": {
    "brandAgg": { 
      "terms": { 
        "field": "brand", 
        "size": 20
      },
      "aggs": { // 是brands聚合的子聚合,也就是分组后对每组分别计算
        "score_stats": { // 聚合名称
          "stats": { // 聚合类型,这里stats可以计算min、max、avg等
            "field": "score" // 聚合字段,这里是score
          }
        }
      }
    }
  }
}

查询中的排序、分页、高亮显示

分页查询建议不能查询超过10000条,因为从ES从各个分片取数据,分页的数据查询量就越大,性能指数级下降,当然也可以通过设置索引的max_result_window来解除限制。

#通过评分和价格排序
GET /hotel/_search
{
 "query": {
   "match_all": {}
 },
 "sort": [
   {
     "score": {
       "order": "desc"
     },
     "price": {
       "order": "asc"
     }
   }
 ]
}
#分页
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  //起始记录数
  "from": 0,
  //获取文档总数
  "size": 20
}
#高亮显示
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    //开始标签
    "pre_tags": "<em>",
    //结束标签
    "post_tags": "</em>", 
    //是否字段匹配,默认情况下搜索字段需要与高亮字段匹配
    "require_field_match": "false", 
    //高亮字段
    "fields": {
      "name": {},
      "brand": {}
    }
  }
}

Elasticsearch 应用案例

  • GitHub: 2013年初,抛弃了Solr,采取Elasticsearch 来做PB级的搜索。“GitHub使用Elasticsearch搜索20TB的数据,包括13亿文件和1300亿行代码”。
  • 维基百科:启动以Elasticsearch为基础的核心搜索架构
  • SoundCloud:“SoundCloud使用Elasticsearch为1.8亿用户提供即时而精准的音乐搜索服务”。
  • 百度:目前广泛使用Elasticsearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。
  • 新浪:使用Elasticsearch分析处理32亿条实时日志
  • 阿里:使用Elasticsearch构建日志采集和分析体系。
  • Stack Overflow:解决Bug问题的网站,全英文,编程人员交流的网站。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容