Elasticsearch документ TTL не работает
Я следую приведенным в документации примерам, чтобы добавить ttl для документов в asticsearch: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html
Используя инструмент Sense в Chrome, я попробовал следующее и ожидал, что документы исчезнут через 5 секунд:
PUT /twitter/tweets/2
{
"_ttl" : "5000",
"user" : "Romonov",
"TestField" : "TestData2"
}
PUT /twitters/tweetsy/1?ttl=5000
{
"user" : "Romonov",
"TestField" : "TestData1"
}
Ничто из вышеперечисленного не работает, и документы все еще видны через 5 секунд. Я также попытался установить _ttl перед созданием любых документов по этому индексу:
PUT /twig/twigsy/_mapping?pretty
{
"user" : {"_ttl": {"enabled": true}}
}
где, я еще не ставлю какие-либо документы на индексную веточку. Но это возвращается с ошибкой:
{
"error": "IndexMissingException[[twig] missing]",
"status": 404
}
Я попробовал то же самое с curl (установил его на моем компьютере с Windows), но получил ту же ошибку:
C:\WINDOWS\system32>curl -XPUT "http://localhost:9200/facebook/fb/_mapping?pretty" -d "{ "user" : {"_ttl": {"enabled": true}}"
{
"error" : "IndexMissingException[[facebook] missing]",
"status" : 404
}
Интересно, что мне не хватает.
2 ответа
Я мог заставить это работать, делая две вещи:
1. Добавьте эту строку в файл asticsearch.yml:
indices.ttl.interval: 7d
2. Создайте документ default-mapping.json в том же месте, что и asticsearch.yml, со следующими строками:
{
_default_ : {
"_ttl" : {
"enabled" : true, "default" : "7d"
}
}
}
Для всех новых кластеров, созданных после выполнения этих двух вещей, ttl включен на 7 дней. По моим наблюдениям до сих пор это относится ко всем индексам, созданным на этих новых кластерах.
Документация TTL объясняет это:
Истекшие документы будут автоматически удаляться регулярно. Вы можете динамически настроить indices.ttl.interval в соответствии с вашими потребностями. Значение по умолчанию составляет 60 с.
Таким образом, документы не удаляются сразу по достижении их TTL, а только при выполнении следующей задачи. Вы можете снизить скорость выполнения этого задания, но при этом производительность снижается.