弹性搜索中_id和_uid之间有什么不同?

时间:2015-04-16 06:44:38

标签: elasticsearch

嗯,这是详细信息:

首先,我创建了三个文档:

foo/bar/1
foo/bar/2
foo/bar/3

我希望获得最大ID:

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
  host: 'localhost: 9200'
});

client.search({
  index: 'foo',
  type: 'bar',
  sort: '_id:desc',
  size: 1,
  fields: [ '_id' ]
}, function(err, resp) {
  if (err) return console.error(err);
  console.log(resp.hits); // _id is '1'
})

在上面的代码中,我无法得到正确的结果。

然后,我谷歌了解它的原因,我找到了'_uid'

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
  host: 'localhost: 9200'
});

client.search({
  index: 'foo',
  type: 'bar',
  sort: '_uid:desc', // here is a little bit different
  size: 1,
  fields: [ '_id' ]
}, function(err, resp) {
  if (err) return console.error(err);
  console.log(resp.hits); // _id is '3'
})

是的,我得到了正确的结果。

所以问题是

我可以说'_id'和'_uid'是一回事吗?

'_id'是否等于'_uid'?

2 个答案:

答案 0 :(得分:3)

不完全相同。

如果_uid未编入索引以执行基于类型的过滤,则会自动使用_type字段,并且不需要对_id编制索引。

http://www.elastic.co/guide/en/elasticsearch/reference/1.3/mapping-uid-field.html

答案 1 :(得分:0)

不,他们不一样。 _uid 是类型和 _id 的组合: {type}#{id} 。因此, _uid 在索引中是唯一的,而 _id 在类型(see the official documentation)中是唯一的。