Библиотекаasticsearch-dsl в python, дающая двойные результаты при использовании метода search.from_dict () для построения запроса из синтаксиса словаря - PullRequest
1 голос
/ 22 сентября 2019

Ниже приведены мои инструкции оболочки iPython:

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

Моим основным требованием было создание запроса с использованием высокоуровневой библиотекиasticsearch-dsl-py в проекте django на основе нескольких входных данных и критериев фильтрации.

Для простоты объяснения и простоты конструирования кода я составил запрос в стиле словаря (json), как базовые запросыasticsearch, затем я использую метод from_dict (dictionary_object) из библиотекиasticsearch_dsl и вызываюcount () и execute () для результата для моих целей.

Показанный выше пример является меньшим, но проблема ясно видна.Используя from_dict, я получаю вдвое больше результатов, чем когда я использую синтаксис высокого уровня (ответ 42 выше верен), кто-нибудь может объяснить, почему так?

1 Ответ

0 голосов
/ 23 сентября 2019

Я нашел ответ с помощью Хонзы.Метод from_dict является методом класса и сбрасывает объект поиска, оставляя его без индекса для поиска, и может дать больше результатов, чем ожидалось, так как он будет выполнять поиск по всем возможным индексам.

Вместо этого мыпросто нужно еще раз упомянуть индекс, что-то вроде: s.from_dict (dict_qry), используя (client) .index (), где client, извести эластичный поиск Elasticsearch client = Elasticsearch ()

Читать об этом здесь

...