Мои документы содержат поле целочисленного массива, в котором хранятся идентификаторы описывающих их тегов. Учитывая конкретный идентификатор тега, я хочу извлечь список наиболее часто встречающихся тегов вместе с предоставленным.
Я могу решить эту проблему, связав агрегацию терминов над полем идентификатора тега с фильтром терминов над тем же полем, но список, который я возвращаю, очевидно, всегда начинается с идентификатора альбома Я предоставляю: все документы, соответствующие моему фильтру, имеют этот тег, и поэтому он первый в списке.
Я подумал об с помощью 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
.
Можно ли избежать возврата этого ведра?
3 ответа
Как и в случае с Elasticsearch 1.4, это недостаток самого ES.
После того, как сообщество предложило это изменение, функциональность добавлена и будет включена в Elasticsearch 1.5.0.
Это должно быть исправлено, начиная с версии 1.5.0. Взгляните на это: https://github.com/elasticsearch/elasticsearch/pull/7727
Пока он находится на пути к исправлению: мой обходной путь состоит в том, чтобы агрегирование использовало сценарий вместо прямого доступа к полю и позволяло этому сценарию использовать значение в виде строки. Работает хорошо и без ощутимой потери производительности.
Похожие вопросы
Новые вопросы
elasticsearch
Elasticsearch - это бесплатная и открытая, распределенная, спокойная поисковая система на основе Lucene.