elasticsearch не возвращает ttl в полях, если он не включен в сопоставлениях

Я создал index и doc в . Добавить сопоставление для doc.

curl http://localhost:9200/test -X POST
{"acknowledged":true}

curl http://localhost:9200/test/student_doc/_mappings -X PUT -d '{
   "student_doc" : {
     "properties" : {
       "name" : {
         "properties" : {
           "student_id" : {
             "type" : "string"
           },
           "tags": {
             "type" : "string"
           }
         }
       }
     }
   }
 }'
{"acknowledged":true}

Когда я создаю документ, я поставил ttl для документа.

curl http://localhost:9200/test/student_doc/4?ttl=2500 -X PUT -d '{"student_id": "4", "tags": ["test"]}' -H 'Content-type: application/json'
{"_index":"test","_type":"student_doc","_id":"4","_version":1,"created":true}'

Когда я пытаюсь получить ttl в fields

curl http://localhost:9200/test/_search?pretty -X POST -d '{"fields": ["_ttl"]}'
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "test",
      "_type" : "student_doc",
      "_id" : "4",
      "_score" : 1.0
    } ]
  }
}

Я включаю ttl в индексе, используя новые сопоставления.

curl http://localhost:9200/test/student_doc/_mappings -X PUT -d '{
  "student_doc" : {
    "_ttl": {"enabled": true},
    "properties" : {
      "name" : {
        "properties" : {
          "student_id" : {
            "type" : "string"
          },
          "tags": {
            "type" : "string"
          }
        }
      }
    }
  }
}'

Затем добавьте новую запись.

curl "http://localhost:9200/test/student_doc/5?ttl=2500&pretty" -X PUT -d '{"student_id": "5", "tags": ["test"]}' -H 'Content-type: application/json'
{
  "_index" : "test",
  "_type" : "student_doc",
  "_id" : "5",
  "_version" : 1,
  "created" : true
}

И попробуйте снова получить ttl, и он вернет ttl в полях.

curl http://localhost:9200/test/_search?pretty -X POST -d '{"fields": ["_ttl"]}'
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "test",
      "_type" : "student_doc",
      "_id" : "4",
      "_score" : 1.0
    }, {
      "_index" : "test",
      "_type" : "student_doc",
      "_id" : "5",
      "_score" : 1.0,
      "fields" : {
        "_ttl" : -420
      }
    } ]
  }
}

Обязательно включить ttl в сопоставлениях, чтобы это произошло в документе?


person Nilesh    schedule 26.07.2016    source источник
comment
Да, _ttl не включен по умолчанию, поэтому вам нужно включить его, чтобы работал TTL, но это не повлияет на уже созданные документы.   -  person Val    schedule 26.07.2016
comment
@Val, если он не может установить ttl, тогда вызов PUT должен вызвать ошибку? Поскольку я получаю created: true, то я предполагаю, что он принимает все мои значения, есть ли способ определить это, если что-то не работает, дайте мне знать.   -  person Nilesh    schedule 26.07.2016
comment
Параметр ttl молча игнорируется, если _ttl не включен, из-за этого вы не получите никаких ошибок. Частью вашей работы является знание ваших сопоставлений и того, включили ли вы TTL или нет.   -  person Val    schedule 27.07.2016
comment
Есть ли проблемы с производительностью, если мы включим ttl или нет? если мы включим ttl и планируем использовать это для документа в будущем, тогда это хорошо, или мы можем включить, когда захотим?   -  person Nilesh    schedule 27.07.2016
comment
Вы можете включить ttl в любое время. Поэтому, учитывая увеличение работы по его поддержке, вы должны включать его только при необходимости.   -  person Val    schedule 27.07.2016
comment
Спасибо @Val, я буду работать над этим. не могли бы вы опубликовать это в ответ, если у кого-то есть такой же запрос, он / она может получить ответ от этого.   -  person Nilesh    schedule 27.07.2016
comment
@Val это правильно или нет, я не уверен, но у меня есть еще один вопрос для elasticsearch stackoverflow.com/questions/38533990/   -  person Nilesh    schedule 28.07.2016


Ответы (1)


Да, _ttl не включен по умолчанию, поэтому вам нужно включить его, чтобы работал TTL, но это не повлияет на уже созданные документы.

Обратите внимание, что параметр ttl молча игнорируется, если _ttl не включен в вашем сопоставлении, из-за этого вы не получите никаких ошибок. Частью вашей работы является знание ваших сопоставлений и того, включили ли вы TTL или нет.

Вы можете включить _ttl в любое время, поэтому, учитывая увеличение объема работы по его поддержке, вам следует включать его только при необходимости.

person Val    schedule 27.07.2016