Query on multi value field and only return hits Elasticsearch in Java

I have a document set out like this:



"created":"Wed Mar 11 2015",

"messages": [

{ "message_id": "1", "message": "Banana", "message_nick": "AdminTech"},

{ "message_id": "2", "message": "iPhone", "message_nick": "AdminTech"},

{ "message_id": "3", "message": "Mac", "message_nick": "AdminTech"},

{ "message_id": "4", "message": "Laptop", "message_nick": "AdminTech"}],

"thread_url":"1-Apple" }

I want to query on the thread_name field, which works, but I also want to
see if the keyword I am querying appears within the messages multi value
fields within message.

So for example, I want to query the word "Laptop". This document should
appear, but I only want the one field where the keyword matched, e.g.
message_id 4.

Here is the code I am using the query in Java:

QueryBuilder query = QueryBuilders.matchQuery(keyword, "thread_name");

QueryBuilder nestedQuery = QueryBuilders.matchQuery("messages.message", 


SearchRequestBuilder srb = client.prepareSearch("thread_and_messages") 






SearchResponse threadResponse = srb.execute().actionGet(); 

SearchHit[] threadHits = threadResponse.getHits().getHits(); 

The code to retrieve the hits and place them within an object is here:

ArrayList messageIdAndMessage = (ArrayList) hit.get("messages");

ArrayList<TalkMessage> messages = new ArrayList<TalkMessage>(); 

FoundThreadAndMessage ftm = new FoundThreadAndMessage(); 




Does anyone know if this query is correct, because at the moment I am
getting every single field back from the query.

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/0138fc1d-f955-48fa-89ad-054a3e5ec4ca%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.