检索文档

想要从Elasticsearch中获取文档,我们使用同样的_index_type_id,但是HTTP方法改为GET

  1. GET /website/blog/123?pretty

响应包含了现在熟悉的元数据节点,增加了_source字段,它包含了在创建索引时我们发送给Elasticsearch的原始文档。

  1. {
  2. "_index" : "website",
  3. "_type" : "blog",
  4. "_id" : "123",
  5. "_version" : 1,
  6. "found" : true,
  7. "_source" : {
  8. "title": "My first blog entry",
  9. "text": "Just trying this out...",
  10. "date": "2014/01/01"
  11. }
  12. }

pretty

在任意的查询字符串中增加pretty参数,类似于上面的例子。会让Elasticsearch美化输出(pretty-print)JSON响应以便更加容易阅读。_source字段不会被美化,它的样子与我们输入的一致。

GET请求返回的响应内容包括{"found": true}。这意味着文档已经找到。如果我们请求一个不存在的文档,依旧会得到一个JSON,不过found值变成了false

此外,HTTP响应状态码也会变成'404 Not Found'代替'200 OK'。我们可以在curl后加-i参数得到响应头:

  1. curl -i -XGET http://localhost:9200/website/blog/124?pretty

现在响应类似于这样:

  1. HTTP/1.1 404 Not Found
  2. Content-Type: application/json; charset=UTF-8
  3. Content-Length: 83
  4. {
  5. "_index" : "website",
  6. "_type" : "blog",
  7. "_id" : "124",
  8. "found" : false
  9. }

检索文档的一部分

通常,GET请求将返回文档的全部,存储在_source参数中。但是可能你感兴趣的字段只是title。请求个别字段可以使用_source参数。多个字段可以使用逗号分隔:

  1. GET /website/blog/123?_source=title,text

_source字段现在只包含我们请求的字段,而且过滤了date字段:

  1. {
  2. "_index" : "website",
  3. "_type" : "blog",
  4. "_id" : "123",
  5. "_version" : 1,
  6. "exists" : true,
  7. "_source" : {
  8. "title": "My first blog entry" ,
  9. "text": "Just trying this out..."
  10. }
  11. }

或者你只想得到_source字段而不要其他的元数据,你可以这样请求:

  1. GET /website/blog/123/_source

它仅仅返回:

  1. {
  2. "title": "My first blog entry",
  3. "text": "Just trying this out...",
  4. "date": "2014/01/01"
  5. }