Juconcurrent 学而不思则罔,思而不学则殆。

Elasticsearch学习笔记(08) - 搜索API概述


简介

在Elasticsearch中,主要有两种搜索的方式。

  1. URI Search - 在URI中使用查询参数
  2. Request Body Search - 基于JSON格式的更加完备的Query Domain Specific Language(DSL)

在URI Search中,可以通过多种方式灵活地进行搜索。

/_search - 整个集群
/index1/_search - 单个索引
/index1,index2/_search - 多个索引
/index*/_search - 通配符索引

而查询的条件,主要通过以下语法来实现。假如搜索的语句是这样的: GET /index1/_search?q=customer_first_name:Susie

  1. 使用q指定查询字符串
  2. 查询字符串语法,使用Key-Value键值对的方式

Request Body Query

Request Body支持GET和POST两种方式。例如:

GET /index1/_search
{
    "query": {
        "match_all": {}
    }
}

这儿的查询是查询所有的记录,但是结果只呈现相关性分数最高的前10条。

Response结构

不管是URI Query,还是Request Body Query,查询的响应结果包含的内容基本是一致的。大致如下:

Response结构

关键字段如下:

  • took - 花费的时间
  • time_out - 是否超时
  • _shards - 分片信息
  • total - 总文档数
  • hits - 结果集,默认前10个
  • _index - 索引名称
  • _id - 文档的id
  • _score - 相关度分数
  • _source - 文档原始数据

这儿需要特别说明一下相关度分数。相关度,英文名为Relevance。同时,有一门学科专门讲述相关度的。衡量相关度有一些关键的指标。

  1. Precision - 查准率,尽可能返回较少的无关文档
  2. Recall - 查全率,尽可能返回较多的相关文档
  3. Ranking - 能够按照相关度进行排序

相关性例子

在上面这个例子中,绿色的圆圈表示希望搜索到的结果,黄色的三角表示不希望搜索到的结果。我们很难精准地搜索到所有我们想要的内容。但是,需要想方设法地尽可能多地搜索到相关文档,尽可能少地搜索到无关文档。


Content