ES基础篇 常用API之搜索查询

文章目录

  • 前言
  • 搜索方式
    • URL搜索
    • DSL搜索
  • 搜索范围
    • 索引范围

前言

Elasticsearch作为当下比较流行的搜索引擎,正如它的简介一样:Elasticsearch is a real-time, distributed storage, search, and analytics engine(ElasticSearch是一个实时的分布式存储、搜索、分析的引擎),它提供了一个开源的高扩展高可用的分布式全文检索引擎,它可以近乎实时的存储、检索数据,本身的扩展性很好,可以扩展到上百台服务器,处理PB级别的数据!

搜索方式

搜索是Elasticsearch核心功能之一,Elasticsearch为用户提供了多种搜索方式,大致分为两类:URL searchRequest Body Search

  • URL Search

    在URL中使用查询参数

  • DSL Search

    使用 Elasticsearch 提供的,基于 JSON 格式的格式更加完备的 Query Dpmain Specific Language (DSL)

URL搜索

查询时,通过将参数追加在请求地址url后,类似编程中Get请求方式携带参数。

这种方式简单便捷,适用于临时在命令行使用一些工具,比如curl,快速发出请求,来检索想要的信息;但如果查询请求很复杂,是很难构建的。故主要用于开发中,生产环境几乎很少使用, 如:

GET /${index}/_search?q=${field}:${keyword}&df=${df_field}&sort=${sort_feild}:desc&from=0&size=10&timeout=1s
{
  "profile": "true"
}

参数说明:

  • q参数指定查询语句,适用Query String Syntax
  • df默认字段,q参数不指定字段时,df用于设置默认字段
  • sort排序
  • fromsize 用于分页
  • Profile 可以查看查询时如何被执行的

DSL搜索

Elasticsearch 提供了一套完整的 DSL(domain-specific language 领域特定语言)搜索方式,将json格式的查询语句通过HTTP Request Body 发送给ElasticSearch。它和 AST 比较类似,并且包含两种类型的语句:

  • 叶子查询语句(Leaf Query clauses )

    指定的字段上查询指定的值,如 match , termrange 等,叶子字句可以单独使用.

  • 复合查询语句 (Compound query clauses)

    以逻辑方式组合多个叶子、复合查询为一个查询,用于合并其他的叶查询或复合查询语句,也就是说复合语句之间可以嵌套,用来表示一个复杂的单一查询, 如

GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [ 
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

对上面的例子分析下:

  1. query 参数表示整个语句是处于 query context 中
  2. boolmatch 语句被用在 query context 中,也就是说它们会计算每个文档的匹配度(_score)
  3. filter 参数则表示这个子查询处于 filter context 中
  4. filter 语句中的 termrange 语句用在 filter context 中,它们只起到过滤的作用,并不会计算文档的得分。

搜索范围

索引范围

Elasticsearch支持单索引、多索引以及所有索引中进行搜索,也可以根据正则、别名等方式指定索引的范围

语法 索引范围
/_search (等价于 /_all/_search) ElasticSearch集群上所有的索引
/{index_1}/_search 索引index_1
/{index_1},{index_2}/_search 索引index_1,index_2
/index*/_search 以index开头的索引
/+index*, -{index_1}/_search 匹配所有以index开头的索引,但不包含index_1的索引

你可能感兴趣的:(ES从入门到跑路,elasticsearch,搜索引擎,大数据)