Post Filter On Nested Value

Hi,

I would like to run a post filter on a nested value, but cannot seem to get
this working.
This is my very simple document structure:

{"code":"ABC", "variants": [{"sku":"123", "price": 15}], "colour":"blue"}
{"code":"DEF", "variants": [{"sku":"456", "price": 30}], "colour":"red"}

I have the following mapping

{"variants": {"type":"nested"}

Which gives me this when I query the mappings, so I know it's in place.

{"variants": {"type":"nested", "properties": { "price": { "type": "long"}}

I run a search to collate aggregations on the colour:

"aggs": { "colour": { "terms": { "field": "colour" } } }

This works a treat and I get Blue 1, and Red 1 returned.

I wanted to run a post filter on variants.price > 20.
I have tried

"post_filter": {
        "range": {"variants.price":{ "gt": 20.0 }}
}

And I get 0 results
I have also tried

"post_filter": {
"nested": {
"path": "variants",
"post_filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

But this crashes.

Can anyone help?

Regards,
Dev

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

I think this should work:

"post_filter": {
"nested": {
"path": "variants",
"filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

--
David :wink:
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

Le 9 janv. 2015 à 14:00, Dev Day dev@devday.com a écrit :

Hi,

I would like to run a post filter on a nested value, but cannot seem to get this working.
This is my very simple document structure:

{"code":"ABC", "variants": [{"sku":"123", "price": 15}], "colour":"blue"}
{"code":"DEF", "variants": [{"sku":"456", "price": 30}], "colour":"red"}

I have the following mapping

{"variants": {"type":"nested"}

Which gives me this when I query the mappings, so I know it's in place.

{"variants": {"type":"nested", "properties": { "price": { "type": "long"}}

I run a search to collate aggregations on the colour:

"aggs": { "colour": { "terms": { "field": "colour" } } }

This works a treat and I get Blue 1, and Red 1 returned.

I wanted to run a post filter on variants.price > 20.
I have tried

"post_filter": {
        "range": {"variants.price":{ "gt": 20.0 }}
}

And I get 0 results
I have also tried

"post_filter": {
"nested": {
"path": "variants",
"post_filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

But this crashes.

Can anyone help?

Regards,
Dev

You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/F2C3BDD2-C1E3-4D0D-80CF-488EBD819F4C%40pilato.fr.
For more options, visit https://groups.google.com/d/optout.

Hi David,

Thank you for your reply & help on this.

Initially I did try this approach, but it didn't work.
However, in order to provide you an example, I created a very simple doc.
When I did this, I could see it worked.
The issue I had with my code was that there was a "price" price at the root
level as well as the variants level.
I didn't think this would be an issue.

I have renamed the price node at the root level and this is now working as
desired.
However, can you tell me why you cannot have keys of the same name in
different levels of a document?

Thank you,

Dev

On Friday, January 9, 2015 at 1:09:05 PM UTC, David Pilato wrote:

I think this should work:

"post_filter": {
"nested": {
"path": "variants",
"filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

--
David :wink:
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

Le 9 janv. 2015 à 14:00, Dev Day <d...@devday.com <javascript:>> a écrit :

Hi,

I would like to run a post filter on a nested value, but cannot seem to
get this working.
This is my very simple document structure:

{"code":"ABC", "variants": [{"sku":"123", "price": 15}], "colour":"blue"}
{"code":"DEF", "variants": [{"sku":"456", "price": 30}], "colour":"red"}

I have the following mapping

{"variants": {"type":"nested"}

Which gives me this when I query the mappings, so I know it's in place.

{"variants": {"type":"nested", "properties": { "price": { "type": "long"}}

I run a search to collate aggregations on the colour:

"aggs": { "colour": { "terms": { "field": "colour" } } }

This works a treat and I get Blue 1, and Red 1 returned.

I wanted to run a post filter on variants.price > 20.
I have tried

"post_filter": {
        "range": {"variants.price":{ "gt": 20.0 }}
}

And I get 0 results
I have also tried

"post_filter": {
"nested": {
"path": "variants",
"post_filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

But this crashes.

Can anyone help?

Regards,
Dev

--
You received this message because you are subscribed to the Google Groups
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com?utm_medium=email&utm_source=footer
.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/840c6b72-f689-4972-a7fe-91b8853ecc84%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

So it’s another story here.

I think you must use in nested filter the full path to your field, including the nested field name.

--
David Pilato | Technical Advocate | Elasticsearch.com
@dadoonet https://twitter.com/dadoonet | @elasticsearchfr https://twitter.com/elasticsearchfr | @scrutmydocs https://twitter.com/scrutmydocs

Le 9 janv. 2015 à 14:30, Dev Day dev@devday.com a écrit :

Hi David,

Thank you for your reply & help on this.

Initially I did try this approach, but it didn't work.
However, in order to provide you an example, I created a very simple doc.
When I did this, I could see it worked.
The issue I had with my code was that there was a "price" price at the root level as well as the variants level.
I didn't think this would be an issue.

I have renamed the price node at the root level and this is now working as desired.
However, can you tell me why you cannot have keys of the same name in different levels of a document?

Thank you,

Dev

On Friday, January 9, 2015 at 1:09:05 PM UTC, David Pilato wrote:
I think this should work:

"post_filter": {
"nested": {
"path": "variants",
"filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

--
David :wink:
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

Le 9 janv. 2015 à 14:00, Dev Day <d...@devday.com <javascript:>> a écrit :

Hi,

I would like to run a post filter on a nested value, but cannot seem to get this working.
This is my very simple document structure:

{"code":"ABC", "variants": [{"sku":"123", "price": 15}], "colour":"blue"}
{"code":"DEF", "variants": [{"sku":"456", "price": 30}], "colour":"red"}

I have the following mapping

{"variants": {"type":"nested"}

Which gives me this when I query the mappings, so I know it's in place.

{"variants": {"type":"nested", "properties": { "price": { "type": "long"}}

I run a search to collate aggregations on the colour:

"aggs": { "colour": { "terms": { "field": "colour" } } }

This works a treat and I get Blue 1, and Red 1 returned.

I wanted to run a post filter on variants.price > 20.
I have tried

"post_filter": {
        "range": {"variants.price":{ "gt": 20.0 }}
}

And I get 0 results
I have also tried

"post_filter": {
"nested": {
"path": "variants",
"post_filter":{
"range": {"price":{ "gt": 20.0 }}
}
}
}

But this crashes.

Can anyone help?

Regards,
Dev

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com https://groups.google.com/d/msgid/elasticsearch/79b7583c-6336-495b-bef1-d9ba0a9e0b83%40googlegroups.com?utm_medium=email&utm_source=footer.
For more options, visit https://groups.google.com/d/optout https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com mailto:elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/840c6b72-f689-4972-a7fe-91b8853ecc84%40googlegroups.com https://groups.google.com/d/msgid/elasticsearch/840c6b72-f689-4972-a7fe-91b8853ecc84%40googlegroups.com?utm_medium=email&utm_source=footer.
For more options, visit https://groups.google.com/d/optout https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/31BEA447-5F60-47E9-A2BA-647EF30D86D0%40pilato.fr.
For more options, visit https://groups.google.com/d/optout.