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

Я могу решить эту проблему, связав агрегацию терминов над полем идентификатора тега с фильтром терминов над тем же полем, но список, который я возвращаю, очевидно, всегда начинается с идентификатора альбома Я предоставляю: все документы, соответствующие моему фильтру, имеют этот тег, и поэтому он первый в списке.

Я подумал об с помощью exclude field, чтобы избежать создания проблемного сегмента, но поскольку я имею дело с целочисленным полем, это кажется невозможным: этот запрос

{
  "size": 0,
  "query": {
    "term": {
      "tag_ids": "00001"
    }
  },
  "aggs": {
    "tags": {
      "terms": {
        "size": 3,
        "field": "tag_ids",
        "exclude": "00001"
      }
    }
  }
}

Возвращает ошибку, говорящую, что Aggregation [tags] cannot support the include/exclude settings as it can only be applied to string values.

Можно ли избежать возврата этого ведра?

1
micpalmia 7 Авг 2014 в 19:13

3 ответа

Лучший ответ

Как и в случае с Elasticsearch 1.4, это недостаток самого ES.

После того, как сообщество предложило это изменение, функциональность добавлена ​​ и будет включена в Elasticsearch 1.5.0.

3
micpalmia 5 Фев 2015 в 16:43

Пока он находится на пути к исправлению: мой обходной путь состоит в том, чтобы агрегирование использовало сценарий вместо прямого доступа к полю и позволяло этому сценарию использовать значение в виде строки. Работает хорошо и без ощутимой потери производительности.

0
Alexander 23 Янв 2015 в 20:14

Это должно быть исправлено, начиная с версии 1.5.0. Взгляните на это: https://github.com/elasticsearch/elasticsearch/pull/7727

0
Alexander 22 Янв 2015 в 14:02