儿童没有适当地适应父母的弹性

时间:2017-03-28 11:05:19

标签: elasticsearch

"chods": {
  "mappings": {
     "chod": {
        "properties": {
           "state": {
              "type": "text"
           }
        }
     },
     "chods": {},
     "variant": {
        "_parent": {
           "type": "chod"
        },
        "_routing": {
           "required": true
        },
        "properties": {
           "percentage": {
              "type": "double"
           }
        }
     }
  }
},

执行时:

PUT /chods/variant/565?parent=36442
{ // some data }

它返回:

{
  "_index":"chods",
  "_type":"variant",
  "_id":"565",
  "_version":6,
  "result":"updated",
  "_shards":{
     "total":2,
     "successful":1,
     "failed":0
  },
  "created":false
}

但是当我运行这个查询时:

GET /chods/variant/565?parent=36442

它返回parent = 36443

的变体
{
   "_index": "chods",
   "_type": "variant",
   "_id": "565",
   "_version": 7,
   "_routing": "36443",
   "_parent": "36443",
   "found": true,
   "_source": {
      ...
   }
}

为什么它与父级36443而不是36442一起返回?

2 个答案:

答案 0 :(得分:0)

当我尝试用你的步骤重现这个时,我得到了预期的结果(版本= 36442)。我注意到,在您使用"_parent": "36442"的文档的PUT之后,输出为"_version":6。在您对文档的GET中,返回"_version": 7。您是否有可能发布该文档的另一个版本?

我还注意到GET /chods/variant/565?parent=36443实际上不会按父ID过滤 - 忽略查询参数。如果您确实希望按父ID进行过滤,则这是您要查找的查询:

GET /chods/_search 
{
  "query": {
    "parent_id": {
      "type": "variant",
      "id": "36442"
    }
  }
}

答案 1 :(得分:0)

正如@fylie所指出的那样,主要的问题是,如果你使用相同的文档ID,你将被上一版本覆盖你的文件 - 有点

假设我们有索引/测试并键入“a”,它是“test”类型的子类,我们执行以下命令:

PUT /tests/a/50?parent=25
{
  "item": "C"
}

PUT /tests/a/50?parent=26
{
  "item": "D"
}

PUT /tests/a/50?parent=50
{
  "item": "E",
  "item2": "F",
}

结果如何?那么它可以导致创建1-3个文档。 如果它将路由到同一个分片,您将得到一个文档,该文档将有3个版本。

如果它将路由到3个不同的分片,最终会有3个新文件。