1

请在我的 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() 和 execute( ) 关于我的目的的结果。

上面显示的是一个较小的示例,但问题很明显。当我使用高级语法时,使用 from_dict 得到双倍的结果(上面的答案 42 是正确的),谁能解释为什么会这样?

4

1 回答 1

0

在 Honza 的帮助下,我找到了答案。方法“from_dict”是一个类方法,它重置搜索对象,因此没有任何索引可供搜索,并且可能会给出比预期更多的结果,因为它会在所有可能的索引中执行搜索。

相反,我们只需要再次提及索引,例如: s.from_dict(dict_qry),using(client).index() 客户端所在的位置,来自 elasticsearch import Elasticsearch client = Elasticsearch()

在这里阅读

于 2019-09-23T05:49:03.920 回答