elasticsearch-dsl使用形式和大小

7eumitmz  于 2023-05-16  发布在  ElasticSearch
关注(0)|答案(3)|浏览(200)

我使用Python 2.7和Elasticsearch-DSL包来查询我的弹性集群。
尝试在查询中添加“from和limit”功能,以便在我的FE中进行分页,这将显示文档弹性返回,但“from”不正确(即我没有正确地使用它,我的配偶)。
相关代码为:

s = Search(using=elastic_conn, index='my_index'). \
       filter("terms", organization_id=org_list)

    hits = s[my_from:my_size].execute() # if from = 10, size = 10 then I get 0 documents, altought 100 documents match the filters.

我的索引包含100份文件。即使我的过滤器匹配所有结果(即没有过滤掉任何内容),例如,如果我使用my_from = 10my_size = 10,那么我也不会得到任何命中(没有匹配的文档)
为什么会这样呢?我是不是用错了形式?
文件规定:
from和size参数。from参数定义从要获取的第一个结果的偏移量。size参数允许您配置要返回的最大命中数。
这看起来很简单,我错过了什么?

yhxst69z

yhxst69z1#

这个问题的答案可以在他们的文档中搜索DSL的分页部分找到:

分页

要指定from/size参数,请使用Python切片API:

s = s[10:20]

# {"from": 10, "size": 10}

在Search DSL中正确使用这些参数就像使用Python列表一样,从起始索引到结束索引进行切片。size参数将被隐式地定义为结束索引减去开始索引。
希望这件事能澄清!

jqjz2hbq

jqjz2hbq2#

尝试如下传递fromsize参数:

search = Search(using=elastic_conn, index='my_index'). \
        filter("terms", organization_id=org_list). \
        extra(from_=10, size=20)
result = search.execute()
icnyk63a

icnyk63a3#

从文档中可以看出,存在1对1Maps[from:size]。然而事实并非如此,因为在python中splicing s[10:10]只是空的。您需要将其指定为s[10:20],即s[from : from+size]

相关问题