Поиск значений вложенного фасета в 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"
}
}
}
}