Hi all,

I'm wondering whether it's possible to do a search, and then score the 
nested docs and use the top_hits aggregator to pick the best one.

I've come up with an example to illustrate this:

https://gist.github.com/npvincent/aecc17a81515f56eadbf

This is a toy example of the problem (I'm doing something more advanced to 
find the author) , but essentially if my documents look like this
{
"name": "tolkien",
"books": [
{"title":"Return of the King", "pages":431},
{"title":"The Fellowship of the Ring", "pages":390},
{"title":"The Two Towers", "pages":376},
{"title":"The Hobbit", "pages":192 }
]
}

and my mappings look like this

{
"properties": {
"name": {
"type": "string"
},
"books": {
"type": "nested",
"properties": {
"title": {
"type": "string"
},
"pages": {
"type": "integer"
}
}
}
}
}

I would like to be able to do a search for relevant authors, and return the 
book that best matches the search criteria (in this example the number of 
pages in it).  I've been looking extensively but I can't find any 
information on whether the nested documents can have their own relevance 
scores.  Nothing I can seem to do to this query effects which book ends up 
in the "top_book" aggregation, and for this I would expect it to be The Two 
Towers as it is a better match, but it's always The Hobbit. Am I just 
trying to do something impossible?

{
"query": {
"bool": {
"must": [
{"term": {"name":"tolkien"}}],
"should": [
{"nested": {
  "path": "books",
  "query": {
  "term": {"pages": 376}
  }
   }}
]
}
},
"aggs": {
"results": {
"terms": { "field": "name" },
"aggs": {
"books": {
"nested": {
"path": "books"
},
"aggs": {
"top_book": { "top_hits": { "size": 1 } }
}
}
}
}
}
}

Cheers,

Nick

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/35ac95ca-fa44-4b24-914d-059df002ae5e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to