0

У меня есть продукты, хранящиеся в ES, и я пытаюсь объединить их по их размеру. Я хотел бы спроектировать следующее поведение. Для каждого термина, даже вне запроса, для получения счетчика сроков на основе запроса.Глобальная агрегирование терминов с отфильтрованным счетом - Elasticsearch 5

Так запрашивая размеров [ "S", "M"] Я хотел бы получить:

S: 1
M: 1
L: 0

ли это как-то можно?

Вот моя установка, где я получаю следующий результат:

S: 1
M: 1

Но L полностью отсутствует.

PUT demo 
{ 
    "mappings": { 
     "product": { 
      "properties": { 
       "size": { 
        "type": "keyword" 
       } 
      } 
     } 
    } 
} 

PUT demo/product/1 
{ 
    "size": "S" 
} 

PUT demo/product/2 
{ 
    "size": "M" 
} 

PUT demo/product/3 
{ 
    "size": "L" 
} 

GET demo/_search 
{ 
    "size": 0, 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "terms": { 
        "size": [ 
        "S", 
        "M" 
        ] 
       } 
      } 
     ] 
     } 
    }, 
    "aggs": { 
     "size": { 
     "terms": { 
      "field": "size" 
     } 
     } 
    } 
} 

ответ

0

Вы можете использовать фильтр.

{ 
    "size": 0, 
    "query": { 
     "bool": { 
      "must": [ 
       { "terms": { "field": "size" } } 
      ], 
      "filter": { 
       "terms": { "size": [ "S", "M"] } 
      } 
     } 
    }, 
    "aggs": { 
     "size": { 
      "terms": { "field": "size" } 
     } 
    } 
} 
+0

Это не похоже на работу в elasticsearch 5. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html –

+0

@JosefRousek I отредактировал мой ответ. Попробуйте еще раз в ES5 – skal88

+0

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