Как сгенерировать облако слов с помощьюasticsearch? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть БД эластичного поиска с данными вида

record = {#all but age are strings
            'diagnosis': self.diagnosis,
            'vignette': self.vignette,
            'symptoms': self.symptoms_list,
            'care': self.care_level_string,
            'age': self.age, #float
            'gender': self.gender
        }

Я хочу создать облако слов данных в vignette.

Я перепробовал все виды запросов иЯ получаю ошибку 400, что означает, что я не понимаю, как запросить базу данных.

Я использую python

Это единственный успешный запрос, который мне удалось получить

   def search_phrase_in_vignettes(self, phrase):
        body = {
            "_source": ["vignette"],
            "query": {
                "match_phrase": {
                    "vignette": {
                        "query": phrase,
                    }
                }
            }
        }
        res = self.es.search(index=self.index_name, doc_type=self.doc_type, body=body)

, который находит любую запись с phrase, содержащуюся в поле `'виньетка'

Я думаю, что некоторая агрегация должна сработать, но я не могу написать правильнуюзапрос с 'aggr'.

Хотелось бы получить некоторую помощь в том, как правильно написать даже самый простой запрос с агрегацией в python.

1 Ответ

0 голосов
/ 09 марта 2019

Используйте агрегирование терминов для подсчета слов подхода. Ваш запрос будет:

{
    "query": {
        "match_phrase": {
            "vignette": {
                "query": phrase,
            }
        }
    },    
    "aggs" : {
        "cloud" : {
            "terms" : { "field" : "vignette" }
        }
    }
}

При получении результатов берите ведра с клавиши aggregations:

res = self.es.search(index=self.index_name, doc_type=self.doc_type, body=body)
for bucket in res['aggregations']['cloud']['buckets']:
    rest of build cloud
...