简介
在Elasticsearch中,主要有两种搜索的方式。
- URI Search - 在URI中使用查询参数
- Request Body Search - 基于JSON格式的更加完备的Query Domain Specific Language(DSL)
URI Search
在URI Search中,可以通过多种方式灵活地进行搜索。
/_search - 整个集群
/index1/_search - 单个索引
/index1,index2/_search - 多个索引
/index*/_search - 通配符索引
而查询的条件,主要通过以下语法来实现。假如搜索的语句是这样的:
GET /index1/_search?q=customer_first_name:Susie
。
- 使用
q
指定查询字符串 - 查询字符串语法,使用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。同时,有一门学科专门讲述相关度的。衡量相关度有一些关键的指标。
- Precision - 查准率,尽可能返回较少的无关文档
- Recall - 查全率,尽可能返回较多的相关文档
- Ranking - 能够按照相关度进行排序
相关性例子
在上面这个例子中,绿色的圆圈表示希望搜索到的结果,黄色的三角表示不希望搜索到的结果。我们很难精准地搜索到所有我们想要的内容。但是,需要想方设法地尽可能多地搜索到相关文档,尽可能少地搜索到无关文档。