我尝试了两个查询。第一个看起来像这样(它只列出所有数据):
# listing 1
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q, F
....
.... connection etc
s = Search(using=db,index="reestr")
rows = s.execute()
for r in rows:
print(r)
listing 1
打印出数据库中的所有文档。奇怪的是,当我试图限制这样的文件数量时:
# listing 2
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q, F
....
.... connection etc
s = Search(using=db,index="reestr").filter(F("limit", value=1))
rows = s.execute()
for r in rows:
print(r)
在这种情况下,它会打印多个文档,但不会按预期打印(我希望通过设置value=1
)。那么,这有什么不对,以及如何限制Elasticsearch
答案 0 :(得分:1)
limit
filter不限制返回的文档数量,只限制查询在每个分片上执行的文档数量。
如果您想限制返回的文档数量,则需要使用size
参数,或者使用Python slicing API这样的情况:
# listing 1
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q, F
....
.... connection etc
s = Search(using=db,index="reestr")
s = s[0:1] <------ limit to only one document
rows = s.execute()
for r in rows:
print(r)