ElasticSearch版本:6.5.0(点击跳转官方文档)
1. elasticsearch 返回体字段含义
字段 | 含义 |
---|---|
took | Elasticsearch执行搜索的时间(以毫秒为单位) |
timed_out | 告诉我们搜索是否超时 |
_shards | 告诉我们搜索了多少个分片,以及搜索成功/失败分片的数量 |
hits | 搜索结果 |
hits.total | 符合我们搜索条件的文档总数 |
hits.hits | 实际的搜索结果数组(默认为前10个文档) |
hits.sort | 对结果进行排序键(如果按分数排序则丢失) |
2. 检索文档
要从es中获取文档,同样适用_index、_type、_id进行定位,使用GET方法
1 | GET /demo/testDate/2 |
响应报文
1 | { |
响应中的节点都熟悉,增加了_source节点,它包含了原始文档。响应消息中包含 {“found”:true},意味着文档已经找到。
如果我们请求一个不存在的文档,依旧会得到一个json,不过found变成了flase。
1 | { |
此外,HTTP状态码变成了"404 Not Found"
pretty的作用
我们使用普通 curl时,返回的json数据格式,没有格式化
使用pretty可以格式化输出的数据
查询条件
1 | get /books/book/_search |
输出结果
1 | { |
3. 基本匹配查询
在news索引,new类型下,所有字段中,查询带有’新华社’的结果
1 | GET /news/new/_search?q=新华社 |
在news索引,new类型下,所有字段中,查询带有’2018’的结果
1 | curl -XGET '127.0.0.1:9200/news/new/_search?q=2018&pretty' |
指定字段
1 | curl -XGET '127.0.0.1:9200/news/new/_search?q=content:2018&pretty' |
指定查询数量
1 | curl -XGET '127.0.0.1:9200/books/book/_search?size=2&q=name:2010&pretty' |
4. match_all(最简单的查询,匹配所有文档)
查询 books 索引,所有文档
1 | GET /books/_search |
查询 books 索引,book类型下,所有文档
1 | GET /books/book/_search |
5. 检索文档指定字段
在_source参数中,可能感觉兴趣的只有address,指定个别字段可以使用_source参数,多个字段用逗号分割。
1 | GET /demo/testDate/2?_source=address |
响应报文
1 | { |
_source节点中只有我们指定的字段
如果只想得到_source节点下的数据,不想要元数据,可以这样
1 | GET demo/testDate/1/_source |
响应报文
1 | { |
5.1. 检查文档是否存在
对文档内容不感兴趣,只想知道文档是否存在,使用HEAD方法 代替 GET方法。
1 | HEAD demo/testDate/1 |
响应报文
1 | 200 - OK |
如果文档不存在
1 | HEAD demo/testDate/t |
响应报文
1 | 404 - Not Found |
6. 指定文档返回数量
books索引、book类型下,查询name包含’中国’的文档,限制返回数量为2。
1 | GET /books/book/_search |
7. Get 和 Search
get API 的形式
1 | GET twitter/_doc/0 |
search API 的形式
1 | GET /twitter/_search?q=tag:wow |
可以看出get API和search API 在形式上的不同。
get api更多的直接通过文档id,直接搜索查询。
search api 则是通过某些查询查询条件,进行搜索查询。
当然了,search api 也可以通过文档id直接搜索查询。
不过需要注意:get API查询,默认是实时的;并且不受索引刷新率的影响(当数据对搜索可见时)。可以通过 realtime 参数进行配置(true-实时 false-禁用实时)。