How to make elasticsearch document ttl work?

Archibald picture Archibald · Jun 4, 2013 · Viewed 12k times · Source

I installed debian package

I am able to push data using curl:

curl -XPUT 'http://mybox:9200/blog/user/dilbert' -d '{
  "name": "Dilbert Brown"
}'

And fetch it

curl -XGET 'http://mybox:9200/blog/user/dilbert'

result:

{
  "_index": "blog",
  "_type": "user",
  "_id": "dilbert",
  "_version": 2,
  "exists": true,
  "_source": {
    "name": "Dilbert Brown"
  }
}

And find it with

curl -XGET 'http://mybox:9200/blog/user/_search?q=name:Dilbert+Brown&pretty=True'

I want to push the same record with ttl of 5 seconds and 5 seconds later get 404 http status code when trying to fetch this entry. Also the entry should not be visible in search results.

NOTE: I tried various combinations of search configurations from

None of them helped me out.

Can somebody mention a simple sequence of steps that would let me achieve the targeted outcome?

Answer

bereal picture bereal · Jun 6, 2013

Here is what works for me:

curl -XPUT 'http://localhost:9200/blog/user/_mapping' -d '{"user": {"_ttl": {"enabled": true, "default": 5000}}}'

curl -XPUT 'http://localhost:9200/blog/user/phb' -d '{"name" : "Pointy-Haired Boss"}'

sleep 60  # this is the default deletion interval for the expired documents

curl -XGET http://localhost:9200/blog/user/phb  # 404