我试图按范围过滤弹性搜索中的_id字段(索引未启用)。可能吗?如果是这样,怎么办? 我在弹性搜索文档中读到,我们可以使用'id'来查询_id和类型,但我看不出如何使用范围过滤器。 (我不想在_id上启用索引。)
{
"from": 0,
"size": 20,
"query": {
"match_all": {}
},
"filter": {
"range": {
"_id": {
"gt": "51f7b6b7710c42b136027581"
}
}
},
"sort": {
"pubdate": {
"order": "desc"
}
}
}
答案 0 :(得分:2)
也许有点晚了,但我试着回答,也许答案对你来说仍然有用。
看到对同事的评论,我认为可以提取两个主要想法:
因此,我编写了一个示例来检查解决方案2是否可行。关键部分是:
#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)
为id
字段建立索引后,您可以根据需要进行过滤。 range
过滤器就是其中之一
elasticsearch_query = {
"query": {
"filtered": {
"filter": {
"range": {
"id": {
"gte" : 3,
"lt" : 5
}
}
}
}
}
}
您可以在this notebook
中看到一个有效的例子