Add CONSOLE to post-filter

This commit is contained in:
Isabel Drost-Fromm 2016-05-18 14:31:04 +02:00
parent 125b715e45
commit a3425b4bf8
1 changed files with 37 additions and 8 deletions

View File

@ -5,14 +5,43 @@ The `post_filter` is applied to the search `hits` at the very end of a search
request, after aggregations have already been calculated. Its purpose is request, after aggregations have already been calculated. Its purpose is
best explained by example: best explained by example:
Imagine that you are selling shirts, and the user has specified two filters: Imagine that you are selling shirts that have the following properties:
[source,js]
-------------------------------------------------
PUT /shirts
{
"mappings": {
"item": {
"properties": {
"brand": { "type": "keyword"},
"color": { "type": "keyword"},
"model": { "type": "keyword"}
}
}
}
}
PUT /shirts/item/1?refresh
{
"brand": "gucci",
"color": "red",
"model": "slim"
}
------------------------------------------------
// CONSOLE
// TESTSETUP
Imagine a user has specified two filters:
`color:red` and `brand:gucci`. You only want to show them red shirts made by `color:red` and `brand:gucci`. You only want to show them red shirts made by
Gucci in the search results. Normally you would do this with a Gucci in the search results. Normally you would do this with a
<<query-dsl-bool-query,`bool` query>>: <<query-dsl-bool-query,`bool` query>>:
[source,js] [source,js]
-------------------------------------------------- --------------------------------------------------
curl -XGET localhost:9200/shirts/_search -d ' GET /shirts/_search
{ {
"query": { "query": {
"bool": { "bool": {
@ -23,8 +52,8 @@ curl -XGET localhost:9200/shirts/_search -d '
} }
} }
} }
'
-------------------------------------------------- --------------------------------------------------
// CONSOLE
However, you would also like to use _faceted navigation_ to display a list of However, you would also like to use _faceted navigation_ to display a list of
other options that the user could click on. Perhaps you have a `model` field other options that the user could click on. Perhaps you have a `model` field
@ -36,7 +65,7 @@ This can be done with a
[source,js] [source,js]
-------------------------------------------------- --------------------------------------------------
curl -XGET localhost:9200/shirts/_search -d ' GET /shirts/_search
{ {
"query": { "query": {
"bool": { "bool": {
@ -52,8 +81,8 @@ curl -XGET localhost:9200/shirts/_search -d '
} }
} }
} }
'
-------------------------------------------------- --------------------------------------------------
// CONSOLE
<1> Returns the most popular models of red shirts by Gucci. <1> Returns the most popular models of red shirts by Gucci.
But perhaps you would also like to tell the user how many Gucci shirts are But perhaps you would also like to tell the user how many Gucci shirts are
@ -67,12 +96,12 @@ the `post_filter`:
[source,js] [source,js]
-------------------------------------------------- --------------------------------------------------
curl -XGET localhost:9200/shirts/_search -d ' GET /shirts/_search
{ {
"query": { "query": {
"bool": { "bool": {
"filter": { "filter": {
{ "term": { "brand": "gucci" }} <1> "term": { "brand": "gucci" } <1>
} }
} }
}, },
@ -95,8 +124,8 @@ curl -XGET localhost:9200/shirts/_search -d '
"term": { "color": "red" } "term": { "color": "red" }
} }
} }
'
-------------------------------------------------- --------------------------------------------------
// CONSOLE
<1> The main query now finds all shirts by Gucci, regardless of color. <1> The main query now finds all shirts by Gucci, regardless of color.
<2> The `colors` agg returns popular colors for shirts by Gucci. <2> The `colors` agg returns popular colors for shirts by Gucci.
<3> The `color_red` agg limits the `models` sub-aggregation <3> The `color_red` agg limits the `models` sub-aggregation