【发布时间】:2019-09-23 13:49:03
【问题描述】:
请在下面找到我的 iPython shell 语句:
In [90]: s = Search(using=client, index='institutes')
In [91]: s = s.filter('match_phrase',country__uri='canada').filter("nested", path="institutecourse_set", query=Q("match_phrase", **{'institutecourse_set.stream.uri': 'sciences'}))
In [92]: di = s.to_dict()
In [93]: s1 = Search(using=client, index='institutes')
In [94]: s1 = s1.from_dict(di)
In [95]: s1.count()
Out[95]: 84
In [96]: s.count()
Out[96]: 42
我的基本要求是在 django 项目中使用高级库 elasticsearch-dsl-py 基于多个输入和过滤条件构建查询。
为了易于解释和易于构建代码,我将查询组成为字典(json)样式,就像基本的 elasticsearch 查询一样,然后我利用 elasticsearch_dsl 库中的“from_dict(dictionary_object)”方法并调用 count()并为我的目的在结果上执行()。
上面显示的是一个较小的示例,但问题很明显。当我使用高级语法时,使用 from_dict 得到双倍的结果(上面的答案 42 是正确的),谁能解释为什么会这样?
【问题讨论】:
标签: python elasticsearch elasticsearch-dsl-py