微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在ElasticSearch中使用单个查询进行多次搜索

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?