如何解决在ElasticSearch中使用单个查询进行多次搜索
我有一个数据集,其中包含可通过三个字段(例如“名称”,“时间戳记”和“国家/地区”)识别的文档。现在,我使用elasticsearch-dsl-py,但是我可以读取本地的Elasticsearch查询,因此也可以接受这些查询。
这是我的代码,可通过三个字段获取单个文档:
def get(name,timestamp,country):
search = Item.search()
search = search.filter("term",name=name)
search = search.filter("term",timestamp=timestamp)
search = search.filter("term",country=country)
search = search[:1]
return search.execute()[0]
这一切都很好,但是有时我需要获取200多个项目,调用此函数意味着对ES进行200个查询。
我正在寻找的是一个查询,该查询将获取三个字段标识符的列表,并返回与之匹配的所有文档,无论顺序如何。
我曾尝试使用OR + AND,但不幸的是,性能仍然很差,尽管至少我没有进行200次服务器往返。
def get_batch(list_of_identifiers):
search = Item.search()
batch_query = None
for ref in list_of_identifiers:
sub_query = Q("match",name=ref["name"])
sub_query &= Q("match",timestamp=ref["timestamp"])
sub_query &= Q("match",country=ref["country"])
if not batch_query:
batch_query = sub_query
else:
batch_query |= sub_query
search = search.filter(batch_query)
return search.scan()
是否有更快/更好的方法来解决此问题?
与在单个查询中使用杂项/杂项(OR / AND)相比,使用多重搜索会更快吗?
编辑:我尝试了多次搜索,但时间实际上没有差异。我们在这里谈论秒。对于6个项目,需要60毫秒才能获得结果,对于200个项目,我们所说的是4-5秒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。