Поиск значений вложенного фасета в asticsearch

Это представляет мое отображение:

{
    "name": {"type": "string", "include_in_all": true},
    "properties": {
    "type": "nested",
    "properties": {
        "name": {"type": "string"},
        "value": {"type": "string"}
    }
}

Как я могу использовать фасетный поиск для значения "properties.value"? Вот пример документа:

{
    "name": "Testproduct",
    "properties": [{
        "name": "Color",
        "value": "Green"
    }, {
        "name": "Size",
        "value": "M"
    }]
}

Я хочу построить граненый список (только) с помощью свойства "Color". Таким образом, результат должен выглядеть следующим образом:

Red: 7 times
Green: 5 times
Blue: 1 times

Это то, что я пробовал до сих пор:

{
    "size": 1000,
    "query": {
        "query_string": {
            "query": " ... ",
            "default_operator": "AND"
        }
    },
    "facets": {
        "resolution": {
            "nested": "properties",
            "facet_filter": {
                "term": {
                    "name": "Color"
                }
            },
            "terms_stats": {
                "key_field": "name",
                "value_field": "value"
            }
        }
    }
}

Если я выполню этот поисковый запрос, я получу следующий ответ:

FacetPhaseExecutionException[Facet [resolution]: value_field [value] isn't a number field, but a string];

Я едва понимаю ответ, но я понятия не имею, что я сделал неправильно по концепции.

1 ответ

Это потому, что вы используете terms_stats, term_stats для чисел. Вы должны использовать terms, Попробуйте этот запрос вместо:

{
  "size": 1000,
  "query": {
    "query_string": {
      "query": " ... ",
      "default_operator": "AND"
    }
  },
  "facets": {
    "resolution": {
      "nested": "properties",
      "facet_filter": {
        "term": {
          "name": "Color"
        }
      },
      "terms": {
        "field": "properties.value"
      }
    }
  }
}
Другие вопросы по тегам