Поиск наиболее частых терминов в индексе (ошибка: 400 - все шарды не пройдены) - PullRequest
0 голосов
/ 29 марта 2019

Я проиндексировал более 2.000.000 документов в Elasticsearch (используя библиотеку Elastic в R), я хочу знать наиболее частые термины в конкретном поле, скажем, поле называется «X», содержащее строки.Однако функция агрегации выдает ошибку: Ошибка: 400 - сбой всех осколков

Я попробовал следующее в R (примеры отрегулированы из руководства библиотеки эластичных данных).

Шаг 1

Сначала я создал индекс с отображением (т. Е. В исходном индексе поле 'X' было проиндексировано как поле 'ключевого слова' вместо текста ', я подумал, что, возможно, в этом проблема.

    body <- list(test = list(properties = list(
         X = list(type="text"),
         Y = list(type="long")
         )))
    if (!index_exists("example")) index_create("example")
    mapping_create(index = "example", type = "test", body=body)

Шаг 2

Затем я проиндексировал пакет документов

    X <- c("xxx first","xxx second","xxx third","yyy fourth")
    Y <- c("21","22","24","17")
    data <- data.frame(X,Y)

    docs_bulk(x=data,index='example',type = "test")

Шаг 3

Затем я создал запрос агрегации и выполнил его в r

    body <-   
  '{
   "size": 0,
   "aggs": {
   "frequent_tags": {
   "terms": {"field": "X"}
   }
   }
   }
   '

    Search(index='example',body=body)

Шаг 4

... и я получил ошибку "Ошибка: 400 - все шарды не удалось"

Шаг 5 и атрибут 6

Next I добавил "."к телу (то есть {" field ":" attribute.X "}), теперь запрос выполняется, но безрезультатно. Я также пробовал {" field ":" keyword.X "}), но это сделалтакже не дает ожидаемых результатов.

Ожидаемый результат

Объект с надписью

xxx --> 3 documents
yyy --> 1 document
first --> 1 document
second --> 1 document
fourth --> 1 document

Спасибо за вашу помощь;дайте мне знать, если вам нужно больше информации.

1 Ответ

1 голос
/ 29 марта 2019

elastic сопровождающий здесь: первое, что нужно при попытке решить проблемы на стороне Elasticsearch, - это сделать connect(errors = "complete") - что приведет к генерации полной трассировки стека Elasticsearch в вашей консоли R, когда она есть.Это должно дать вам знать, где именно проблема в вашем запросе.

Я следовал вашему примеру выше с установленным connect(errors = "complete") и получаю:

Search(index='example',body=body)
Error: 400 - all shards failed
ES stack trace:

  type: illegal_argument_exception
  reason: Fielddata is disabled on text fields by default. Set fielddata=true on
    [X] in order to load fielddata in memory by uninverting the inverted index. 
    Note that this can however use significant memory. Alternatively use a keyword
    field instead.

с

elastic::ping()$version$number
[1] "6.6.1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...