So, there are a couple of things to note:
1. The first 2 queries target the wrong filed "desc" not "Body":
sreq := NewSearchRequest(NewPhraseQuery([]string{"Texas", "Wings"}, "desc"))
sreq = NewSearchRequest(NewPhraseQuery([]string{"Texas", "Roadstar"}, "desc"))
But, even after changing that, they still don't work as expected, because...
2. The keyword analyzer indexes the fields *exactly* as they are. That means that "Texas Wings" is indexed as "Texas Wings" (note thats all 1 term, not 2 separate terms). That means that a phrase search cannot match it, as its not a phrase, just a single term. To illustrate this, here is a query that does match the data as indexed:
q := NewTermQuery("Texas Wings").SetField("Body")
sreq := NewSearchRequest(q)
3. The query strings you're using aren't doing what you want either. For example:
+Body:Texas Wings
This is only restricting the term Texas to the field body, and it's search for Wings in any field. If you wanted to do a phrase search you must put the phrase in quotes like:
+Body:"Texas Wings"
But, again that still won't match. So, how can you make this work? It really depends what you're trying to do. If you want to be able to do phrase searches, you have to tokenize the input so that the terms are indexed separately. But, with a custom analyzer you could do this without any lower-casing, stemming or stop-word removal (so that it still behaves more like exact match).
Alternatively, if you really want exact match on the whole field value, you can use term search as illustrated above.
Or if you want something else entirely, maybe describe that a little bit more.
Thanks,
marty