Это старый вопрос, но, поскольку я немного боролся с подобным запросом, я подумал, что добавлю свои два цента.Прежде всего я не смог найти
SearchBuilder.searchSource.query(query_string).buildAsBytes()
Как уже упоминалось в исходном вопросе в ES java API.
Мое тело запроса выглядело как
{
"query": {
"query_string": {
"default_field": "file",
"query": "Java"
}
},
"highlight": {
"fields": {
"file": {
}
}
}
}
Iобнаружил, что это можно сделать следующими двумя способами:
String queryString = "{"
+ "\"query_string\": "
+ "{"
+ "\"default_field\":"
+ " \"file\","
+ " \"query\": \"Email OR @gmail.com @yahoo.com\""
+ "}"
+ "}";
Первый подход
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryString); //or searchSourceBuilder.query(queryString).buildAsBytes();
SearchRequestBuilder searchRequestBuilder = new SearchRequestBuilder( ESConnectionFactory.INSTANCE.getClient()) ;
searchRequestBuilder.internalBuilder(searchSourceBuilder).setIndices("resume")
.setTypes("docs").addHighlightedField("file");
Второй подход
SearchRequestBuilder searchRequestBuilder = client.prepareSearch()
.setIndices("resume")
.setTypes("docs").setQuery(queryString).addHighlightedField("file");
А потом стандартные
SearchResponse response = searchRequestBuilder.execute().actionGet();
Ключи к сведению
- Не добавляйте «запрос» вqueryString
- Не добавлять выделенные поля в строку запроса.Используйте addHighlightedField