Как сгенерировать облако слов с помощью elasticsearch?

#python #elasticsearch #elasticsearch-aggregation

#python #elasticsearch #elasticsearch-агрегация

Вопрос:

У меня есть база данных elasticsearch с данными вида

 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. elastic.co/blog/tag-that-cloud-a-new-visualization-in-kibana

Ответ №1:

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

 {
    "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
  

Комментарии:

1. Привет, спасибо. То, что вы предлагаете, дает мне, elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', '[match_phrase] unknown token [START_OBJECT] after [query]') я изменил "query": phrase to «query»: {«match_all»: {}}`, а остальное то же самое. Есть мысли?

2. Вы знаете, у меня был клиент. Я пишу скрипт для своего клиента, через два дня он звонит мне: Мы меняем ваш скрипт, и теперь он не работает. Не будьте таким, как он…

3. Причина, по которой я изменил скрипт, заключалась в том, что я хочу запрашивать не фразу, а все слова, как я написал в вопросе. Что я должен вставить во фразу в вашем случае?

4. Удалить запрос вообще. И начните читать документацию: elastic.co/guide/en/elasticsearch/reference/current /…