美文网首页
ElasticSearch DSL查询语法

ElasticSearch DSL查询语法

作者: 舞鹤Roc | 来源:发表于2023-03-28 11:47 被阅读0次

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

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

查询索引相关的用法

  • /_search 集群上所有的索引
  • /index1/_search index1索引
  • /index1,index2/_search index1和index2索引
  • /index*/_search 以index开头的索引
DSL查询

基础语法

GET /indexName/_search
{
  "query": {
    "查询类型": {
      "查询条件": "条件值"
    }
  }
}

全文检索查询

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"
          }
        }
      ]
    }
  }
}

排序查询

#通过评分和价格排序
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问题的网站,全英文,编程人员交流的网站。

相关文章

网友评论

      本文标题:ElasticSearch DSL查询语法

      本文链接:https://www.haomeiwen.com/subject/eagtddtx.html