搜索文档

要从Elasticsearch中获取文档,我们需要使用同样的_index_type以及 _id但是不同的HTTP变量GET

  1. GET /website/blog/123?pretty

返回结果包含了之前提到的内容,以及一个新的字段_source,它包含我们在最初创建索引时的原始JSON文档。

  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就可以得到优美打印的更加易于识别的JSON结果。_source字段不会执行优美打印,它的样子取决于我们录入的样子。


GET请求的返回结果中包含{"found": true}。这意味着这篇文档确实被找到了。如果我们请求了一个不存在的文档,我们依然会得到JSON反馈,只是found的值会变为false

同样,HTTP返回码也会由'200 OK'变为'404 Not Found'。我们可以在curl后添加-i,这样你就能得到反馈头文件:

  1. curl -i -XGET /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字段中就只会显示你指定的字段:

  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. }