本文是对Elasticsearch基本语法的部分补充,方便大家更好的理解对Elasticsearch基础语法的基本使用
1、文档输入
在输入一个文档时:文档中的 _index
、 _type
和 _id
唯一标识一个文档。 我们可以提供自定义的 _id
值,或者让 index
API 自动生成
2、返回文档中部分字段
单个字段能用 _source
参数请求得到,多个字段也能使用逗号分隔的列表来指定
curl -X GET "localhost:9200/website/blog/123?_source=title,text&pretty"
返回结果:
{
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 1,
"found" : true,
"_source" : {
"title": "My first blog entry" ,
"text": "Just trying this out..."
}
}
其中结果中:_version表示文档所对应的版本,found表示是否查询文档成功,_source表示返回的文档信息;其中像_index,_type,_id,_version及found为ES返回的元数据信息
如果想得到 _source
字段,不需要任何元数据,你能使用 _source
端点:
curl -X GET "localhost:9200/website/blog/123/_source?pretty"
返回结果:
{
"title": "My first blog entry",
"text": "Just trying this out...",
"date": "2014/01/01"
}
3、文档部分更新
在更新一个文档的方法是检索并修改它,然后重新索引整个文档。然而,使用 update
API 我们还可以部分更新文档
在文档更新是不可变的:他们不能被修改,只能被替换。 update
API 必须遵循同样的规则。从外部来看,我们在一个文档的某个位置进行部分更新。然而在内部, update
API 简单使用与之前描述相同的 检索-修改-重建索引 的处理过程。区别在于这个过程发生在分片内部,这样就避免了多次请求的网络开销。通过减少检索和重建索引步骤之间的时间,我们也减少了其他进程的变更带来冲突的可能性。
update
请求最简单的一种形式是接收文档的一部分作为 doc
的参数, 它只是与现有的文档进行合并。对象被合并到一起,覆盖现有的字段,增加新的字段。例如,我们增加字段 tags
和 views
到我们的博客文章,如下所示:
curl -X POST "localhost:9200/website/blog/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
"doc" : {
"tags" : [ "testing" ],
"views": 0
}
}
'
4、空搜索
curl -X GET "localhost:9200/_search?pretty"
返回结果:
{
"hits" : {
"total" : 14,
"hits" : [
{
"_index": "us",
"_type": "tweet",
"_id": "7",
"_score": 1,
"_source": {
"date": "2014-09-17",
"name": "John Smith",
"tweet": "The Query DSL is really powerful and flexible",
"user_id": 2
}
},
... 9 RESULTS REMOVED ...
],
"max_score" : 1
},
"took" : 4,
"_shards" : {
"failed" : 0,
"successful" : 10,
"total" : 10
},
"timed_out" : false
}
(1)hits
返回结果中最重要的部分是 hits
,它包含 total
字段来表示匹配到的文档总数,并且一个 hits
数组包含所查询结果的前十个文档。
在 hits
数组中每个结果包含文档的 _index
、 _type
、 _id
,加上 _source
字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你单独去获取文档。
每个结果还有一个 _score
,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score
降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1
是中性的 _score
。
max_score
值是与查询所匹配文档的 _score
的最大值。
(2)took
took
值告诉我们执行整个搜索请求耗费了多少毫秒。
(3)shards
_shards
部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。
(4)timeout
timed_out
值告诉我们查询是否超时。默认情况下,搜索请求不会超时。如果低响应时间比完成结果更重要,你可以指定 timeout
为 10 或者 10ms(10毫秒),或者 1s(1秒):
GET /_search?timeout=10ms
在请求超时之前,Elasticsearch 将会返回已经成功从每个分片获取的结果。
发表评论