Задать вопрос
@livemirsi

Как сделать агрегацию?

Добрый день.
Есть индекс в elasticsearch, у документов есть поле parameters хранит в себе массив элементов, элементы обычные строки
Пытаюсь сделать запрос, что бы найти документы в которых в массиве parameters есть к примеру 'elem1' и 'elem2' ([........'elem1', ........'elem2'])
После того как выбрал их, сделать им distinct (узнать количество значений массива в этой выборки), делаю с помощью агрегации:
aggs: {
	results: {
		filter: {
			terms: {
				parameters: ['elem1', 'elem2']
			}
		},
		terms: {
			field: 'parameters',
			size: 200				            	
		}
	}
}

В итоге получаю неверные результаты, такое ощущение что агрегация не реагирует на :
filter: {
	terms: {
		parameters: ['elem1', 'elem2']
	}
}

Подскажите как правильно организовать такой запрос?
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@livemirsi Автор вопроса
Да немного неправильно сделал запрос) Вот как сделать поиск с содержанием значения в массиве с последующей агрегацией:
aggs: {
	results: {
		filter: {
			bool: {
				must: [
				{
					term: {
						parameters: 'elem1'
					}
				},
				{
					term: {
						parameters: 'elem2'
					}
				}
				]
			}
		},
		aggs: {
			count:{
				terms: {
					field: 'parameters',
					size: 200				            	
				}				        		
			}		        	
		}
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы