библиотека elasticsearch-dsl в python, дающая двойные результаты при использовании метода search.from_dict() для построения запроса из синтаксиса словаря

Пожалуйста, найдите ниже мои операторы оболочки 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

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

Чтобы код был понятным и простым в построении, я составил запрос в стиле словаря (json), как и базовые запросы elasticsearch, затем я использую метод «from_dict (dictionary_object)» из библиотеки elasticsearch_dsl, вызываю count () и выполняю ( ) на результат для моих целей.

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


person Shivendra Srivastava    schedule 22.09.2019    source источник


Ответы (1)


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

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

Прочитайте об этом здесь

person Shivendra Srivastava    schedule 23.09.2019