Reputation: 191
I am trying to generate the following query in code:
{
"query": {
"bool": {
"should": [
{
"match": {
"title1": "brown"
}
},
{
"match": {
"title2": "fox"
}
},
{
"match": {
"title3": "dog"
}
}
]
}
}
}
Here is my java code built with QueryBuilders
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(matchQuery("title1", "brown"));
boolQueryBuilder.must(matchQuery("title2", "fox"));
boolQueryBuilder.must(matchQuery("title3", "dog")); SearchSourceBuilder
searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
String s = searchSourceBuilder.toString();
And I am not getting the same string... What I am getting is:
{
"query": {
"bool": {
"must": [
{
"match": {
"title1": {
"query": "brown",
"type": "boolean"
}
}
},
{
"match": {
"title2": {
"query": "fox",
"type": "boolean"
}
}
},
{
"match": {
"title3": {
"query": "dog",
"type": "boolean"
}
}
}
]
}
}
}
What am I missing...?
Upvotes: 0
Views: 410
Reputation: 2096
First you are using .must
so you'll have a must and not should.
Here is an example to achieve what you want to do
MatchQueryBuilder match1 = QueryBuilders.matchQuery("title1", "brown");
MatchQueryBuilder match2 = QueryBuilders.matchQuery("title2", "fox");
MatchQueryBuilder match3 = QueryBuilders.matchQuery("title3", "dog");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(match1);
boolQueryBuilder.should(match2);
boolQueryBuilder.should(match3);
String queryString = boolQueryBuilder.toString();
Upvotes: 2