Reputation: 69
I have structure something like this:
{
id: "someId",
age: "15",
metadata: {
otherId: "someOtherId"
}
}
and i need to create query builder
to get all objects where my dto.providedId == id
or dto.providedId == metadata.otherId
,
I try do it in this way:
if(dto.getProvidedId() != null){
BoolQueryBuilder boolQueryBuilder= new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery("id.keyword", dto.getProvidedId()));
boolQueryBuilder.must(QueryBuilders.termQuery("metadata.otherId", dto.getProvidedId()));
}
but it return me empty array and I don't know why :(
can someone tell me how to do this?
{
"index": {
"analysis": {
"analyzer": {
"default": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "whitespace"
}
}
}
}
}
thanks for any help
Upvotes: 2
Views: 172
Reputation: 217474
If you need OR semantics, then you need to use should
instead of `must``
BoolQueryBuilder boolQueryBuilder= new BoolQueryBuilder();
boolQueryBuilder.minimumShouldMatch(1);
boolQueryBuilder.should(QueryBuilders.termQuery("id.keyword", dto.getProvidedId()));
boolQueryBuilder.should(QueryBuilders.termQuery("metadata.otherId", dto.getProvidedId()));
Also make sure to check if metadata.otherId
should not be metadata.otherId.keyword
.
Upvotes: 4