Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filter _id range in elasticsearch

I am trying to filter _id field (index not enabled) in elasticsearch by range. Is it possible? If so, how it can be done? I've read in elasticsearch documentation that we can use 'ids' to query by _id and type, but I can't see how it can be done with range filter. (I don't want to enable index on _id).

{
  "from": 0,
  "size": 20,
  "query": {
    "match_all": {}
  },
  "filter": {
        "range": {
          "_id": {
            "gt": "51f7b6b7710c42b136027581"
          }
        }
  },
  "sort": {
    "pubdate": {
      "order": "desc"
    }
  }
}
like image 897
Douglas C Vasconcelos Avatar asked Jul 30 '13 16:07

Douglas C Vasconcelos


1 Answers

Maybe it's a little late, but I try to answer and maybe the answer is still usefull for you.
Seen the comments done for collegues, I think that two main ideas can be extracted:

  1. Generated id by Elasticsearch can't be used to filter or perform any operation other than GET o id search.
  2. Index custom uid value is guessed (and that's the way I'd try to solve the problem)

So, I've coded an example to check if solution 2 is possible. Key parts are these:

#cluster node to query
es = Elasticsearch(['localhost:9200',])
records = [
    #some custom data
]
for idx,r in enumerate(records):
    _index_config = dict(index_config)
    #set Elasticsearch uid
    _index_config['_id'] = idx
    #replicate in a document field to be able to filter for
    r['id'] = idx
    kwargs['body'].append({'index' : _index_config})
    kwargs['body'].append(r)

_ = es.bulk(**kwargs)

Once you have indexed the id field, you can filter by it as you wish. range filter is one of them

elasticsearch_query = {
    "query": {
        "filtered": {
            "filter": {
                "range": {
                    "id": {
                        "gte" : 3,
                        "lt"  : 5
                    }
                }
            }
        }
    }
}

You can see a working example in this notebook

like image 104
xecgr Avatar answered Sep 23 '22 07:09

xecgr