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

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

Я подумал об с помощью 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
Michele Palmia 7 Авг 2014 в 19:13
У меня была та же проблема, и я придумал 2 возможных решения: 1 индексировать Id как строку 2 добавить дубликат поля Id_string как строку. Пошел по второму варианту. Очевидно, что это не лучший подход, но он выполняет свою работу. Мне было интересно, есть ли лучший способ использовать термины «включить», «исключить» с нестроковыми значениями. может быть, преобразовать их в строку с помощью скрипта ????
 – 
Levon
17 Окт 2014 в 18:14

3 ответа

Лучший ответ

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

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

3
Michele Palmia 5 Фев 2015 в 19:43

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

0
Alexander 22 Янв 2015 в 17:02
Да, начать обсуждение этого было определенно хорошей идеей github.com/elasticsearch/elasticsearch/issues/ 7714
 – 
Michele Palmia
22 Янв 2015 в 18:23

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

0
Alexander 23 Янв 2015 в 23:14