2017-01-18 3 views
1

Я могу получить слово облако с помощью старой версии elasticsearch с использованием агрегирования терминов. Я хочу получить слово облако от сообщение в es5, и я использую ниже запрос.Word Cloud в Elasticsearch 5

"aggs": { 
     "tagcloud": { 
      "terms": { 
       "field": "content.raw", 
       "size": 10 
      } 
     } 
    } 

Я сделал отображение как этот

"content": { 
    "type": "text", 
    "fields": { 
     "raw": { 
      "type": "keyword" 
     } 
    } 
} 

Но результат не приходит, как облако слов, как и ожидалось. Он группирует аналогичные должности (весь пост) и дает в виде списка данный belown

"buckets": [ 
{ 
    "key" : "This car is awesome.", 
    "doc_count" : 199 
}, 
.. 
.. 

Как это сделать?

ответ

1

Тип keyword делает в целом то же самое, что и string с not_analyzed индексным режимом. Вся строка индексируется. И вы можете искать только по точному значению. В вашем случае, я думаю, вам нужно использовать поле, которое анализируется и обозначается, например поле content. Однако вам необходимо убедиться, что для опции поля fielddata установлено значение true. В противном случае сервер возвращает исключение. Поэтому ваше отображение должно выглядеть

"content": { 
    "fielddata" : true, 
    "type": "text" 
} 

и агрегации

"aggs": { 
    "tagcloud": { 
     "terms": { 
      "field": "content", 
      "size": 10 
     } 
    } 
} 

В результате вы должны увидеть что-то, что выглядит как (это зависит от того, что анализатор вы выбираете)

"buckets": [ 
{ 
    "key" : "this", 
    "doc_count" : 199 
}, 
{ 
    "key" : "car", 
    "doc_count" : 199 
}, 
{ 
    "key" : "is", 
    "doc_count" : 199 
}, 
{ 
    "key" : "awesome", 
    "doc_count" : 199 
}, 
... 
+1

«fielddata ": true - очень дорогостоящая вещь, как описано в документации https://www.elastic.co/guide/en/elasticsearch/reference/5.0/fielddata.html. Есть ли другой путь? –

+0

Я, к сожалению, ничего не знаю. –

+1

@Mohammad Shahid Способ, которым вы можете сделать его менее дорогостоящим, - использовать fielddata_frequency_filter, чтобы таким образом вам не приходилось хранить очень частые или редкие слова – elachell

Смежные вопросы