Created
March 26, 2021 15:16
-
-
Save rukeba/2afa51aa7073d3df05dc8a3d74ee1832 to your computer and use it in GitHub Desktop.
Facet Search in ElasticSearch: Sample Kibana script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DELETE /p01 | |
PUT /p01 | |
{ | |
"mappings": { | |
"properties": { | |
"name": { | |
"type": "text" | |
}, | |
"facet_string": { | |
"type": "nested", | |
"properties": { | |
"facet_name": { | |
"type": "keyword" | |
}, | |
"facet_value": { | |
"type": "keyword" | |
} | |
} | |
}, | |
"facet_number": { | |
"type": "nested", | |
"properties": { | |
"facet_name": { | |
"type": "keyword" | |
}, | |
"facet_value": { | |
"type": "double" | |
} | |
} | |
} | |
} | |
} | |
} | |
# Colors: White, Red, Black | |
# Sizes: S, M, L | |
# Fabric: Cotton, Silk | |
POST /p01/_doc | |
{ | |
"name": "Black L Cotton", | |
"facet_string" : [ | |
{ "facet_name": "Color", "facet_value": "Black" }, | |
{ "facet_name": "Size", "facet_value": "L" }, | |
{ "facet_name": "Fabric", "facet_value": "Cotton" } | |
], | |
"facet_number" : [ | |
{ "facet_name": "list_price", "facet_value": 29.88 }, | |
{ "facet_name": "net_price", "facet_value": 20.77 } | |
] | |
} | |
# select all | |
POST /p01/_search | |
{ | |
"query": { | |
"match_all": {} | |
} | |
} | |
# all aggs only | |
POST /p01/_search | |
{ | |
"size": 0, | |
"aggs": { | |
"agg_facet_string": { | |
"nested": { | |
"path": "facet_string" | |
}, | |
"aggs": { | |
"facet_string": { | |
"terms": { | |
"field": "facet_string.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"terms": { | |
"field": "facet_string.facet_value" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"agg_facet_number": { | |
"nested": { | |
"path": "facet_number" | |
}, | |
"aggs": { | |
"facet_name": { | |
"terms": { | |
"field": "facet_number.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"histogram": { | |
"field": "facet_number.facet_value", | |
"interval": 5, | |
"min_doc_count": 1 | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
# search request with single facet filter | |
# Color = White | |
POST /p01/_search | |
{ | |
"query": { | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": | |
{ | |
"facet_string.facet_name": "Color" | |
} | |
}, | |
{ | |
"term": { | |
"facet_string.facet_value": "White" | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
"aggs": { | |
"agg_facet_string": { | |
"nested": { | |
"path": "facet_string" | |
}, | |
"aggs": { | |
"facet_string": { | |
"terms": { | |
"field": "facet_string.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"terms": { | |
"field": "facet_string.facet_value" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"agg_facet_number": { | |
"nested": { | |
"path": "facet_number" | |
}, | |
"aggs": { | |
"facet_name": { | |
"terms": { | |
"field": "facet_number.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"histogram": { | |
"field": "facet_number.facet_value", | |
"interval": 5, | |
"min_doc_count": 1 | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
# search query with two facet filters | |
# Color = White OR Red | |
POST /p01/_search | |
{ | |
"query": { | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": | |
{ | |
"facet_string.facet_name": "Color" | |
} | |
}, | |
{ | |
"terms": | |
{ | |
"facet_string.facet_value": ["White", "Red"] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
"aggs": { | |
"agg_facet_string": { | |
"nested": { | |
"path": "facet_string" | |
}, | |
"aggs": { | |
"facet_string": { | |
"terms": { | |
"field": "facet_string.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"terms": { | |
"field": "facet_string.facet_value" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"agg_facet_number": { | |
"nested": { | |
"path": "facet_number" | |
}, | |
"aggs": { | |
"facet_name": { | |
"terms": { | |
"field": "facet_number.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"histogram": { | |
"field": "facet_number.facet_value", | |
"interval": 5, | |
"min_doc_count": 1 | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
# ( Color = White OR Red ) AND (Size = M) | |
POST /p01/_search | |
{ | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"bool": { | |
"must": [ | |
{ | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": { | |
"facet_string.facet_name": "Color" | |
} | |
}, | |
{ | |
"terms": { | |
"facet_string.facet_value": [ | |
"White", | |
"Red" | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
{ | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": { | |
"facet_string.facet_name": "Size" | |
} | |
}, | |
{ | |
"terms": { | |
"facet_string.facet_value": [ | |
"M" | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"aggs": { | |
"agg_facet_string": { | |
"nested": { | |
"path": "facet_string" | |
}, | |
"aggs": { | |
"facet_string": { | |
"terms": { | |
"field": "facet_string.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"terms": { | |
"field": "facet_string.facet_value" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"agg_facet_number": { | |
"nested": { | |
"path": "facet_number" | |
}, | |
"aggs": { | |
"facet_name": { | |
"terms": { | |
"field": "facet_number.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"histogram": { | |
"field": "facet_number.facet_value", | |
"interval": 5, | |
"min_doc_count": 1 | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
# ( Color = White OR Red ) AND (Size = M) AND ( 30 < list_price < 40 ) | |
POST /p01/_search | |
{ | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"bool": { | |
"must": [ | |
{ | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": { | |
"facet_string.facet_name": "Color" | |
} | |
}, | |
{ | |
"terms": { | |
"facet_string.facet_value": [ | |
"White", | |
"Red" | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
{ | |
"nested": { | |
"path": "facet_string", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": { | |
"facet_string.facet_name": "Size" | |
} | |
}, | |
{ | |
"terms": { | |
"facet_string.facet_value": [ | |
"M" | |
] | |
} | |
} | |
] | |
} | |
} | |
} | |
}, | |
{ | |
"nested": { | |
"path": "facet_number", | |
"query": { | |
"bool": { | |
"filter": [ | |
{ | |
"term": { | |
"facet_number.facet_name": "list_price" | |
} | |
}, | |
{ | |
"range": { | |
"facet_number.facet_value": { | |
"gte": 30, | |
"lt": 40 | |
} | |
} | |
} | |
] | |
} | |
} | |
} | |
} | |
] | |
} | |
} | |
] | |
} | |
}, | |
"aggs": { | |
"agg_facet_string": { | |
"nested": { | |
"path": "facet_string" | |
}, | |
"aggs": { | |
"facet_string": { | |
"terms": { | |
"field": "facet_string.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"terms": { | |
"field": "facet_string.facet_value" | |
} | |
} | |
} | |
} | |
} | |
}, | |
"agg_facet_number": { | |
"nested": { | |
"path": "facet_number" | |
}, | |
"aggs": { | |
"facet_name": { | |
"terms": { | |
"field": "facet_number.facet_name" | |
}, | |
"aggs": { | |
"facet_value": { | |
"histogram": { | |
"field": "facet_number.facet_value", | |
"interval": 5, | |
"min_doc_count": 1 | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment