Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make elasticsearch document ttl work?

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

  • http://www.elasticsearch.org/guide/reference/mapping/ttl-field/
  • http://www.elasticsearch.org/guide/reference/api/index_/
  • http://elasticsearch-users.115913.n3.nabble.com/TTL-in-elastic-search-is-not-working-td4034844.html

None of them helped me out.

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

like image 785
Archibald Avatar asked Jun 04 '13 09:06

Archibald


People also ask

What is Elasticsearch TTL?

TTL, or time to live, is a setting that can be applied to documents in Elasticsearch to automatically remove them after a certain amount of time has passed. This is useful for data that is only relevant for a short period of time, such as log data or temporary data.

Does Elasticsearch store data in memory or disk?

Elasticsearch indexes are just files and they effectively cached in RAM by system. Usually if you have enough RAM Elasticsearch should work as fast as possible, especially for GET queries.

How many documents can Elasticsearch hold?

You could have one document per product or one document per order. There is no limit to how many documents you can store in a particular index.

Is type deprecated in Elasticsearch?

x. Types are deprecated in APIs in 7.0, with breaking changes to the index creation, put mapping, get mapping, put template, get template and get field mappings APIs.


1 Answers

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
like image 51
bereal Avatar answered Nov 15 '22 11:11

bereal