0

I have a data available in ES in the below format. Lets call each json object as campaign object.

{id:"c1", tags:[{key:"k1",value:"v1"}, {key:"k2",value:"v2"}, {key:"k3",value:"v3"}]}

{id:"c2", tags:[{key:"k1",value:"v1"}, {key:"k4",value:"v4"}]}

{id:"c3", tags:[{key:"k5",value:"v5"}, {key:"k2",value:"v2"}]}

My client sends me the list of tag objects, i have to return the corresponding campaign objects to the client. For ex. 1st Example Req. -

[{key:"k1",value:"v1"}]

Res. -

{id:"c1", tags:[{key:"k1",value:"v1"}, {key:"k2",value:"v2"}, {key:"k3",value:"v3"}]}

{id:"c2", tags:[{key:"k1",value:"v1"}, {key:"k4",value:"v4"}]}

2nd Example Req. -

[{key:"k3",value:"v3"},{key:"k5",value:"v5"}]

Res. -

{id:"c2", tags:[{key:"k1",value:"v1"}, {key:"k4",value:"v4"}]}

{id:"c3", tags:[{key:"k5",value:"v5"}, {key:"k2",value:"v2"}]}

My service is written in spring boot, which es querybuilder(termsquery,nestedquery) should i use to achieve the same?

I tried this sample query , but it is returning empty list.

boolQueryBuilder.filter( QueryBuilders.termsQuery("tags", TAG_LIST));

2
  • if field tags is nested type you must use nested query. Commented Jul 7, 2023 at 17:50
  • which versions of Spring Boot, Spring Data Elasticsearch and Elasticsearch are you using? Commented Jul 8, 2023 at 14:49

1 Answer 1

0

If Tags is Nested try this:

    var query = QueryBuilders.boolQuery()
        .must(QueryBuilders.termsQuery("tags.key", "k1"))
        .must(QueryBuilders.termsQuery("tags.value", "v1"));
    var nestedQuery = QueryBuilders
        .nestedQuery("tags", query, ScoreMode.None);

    SearchRequest searchRequest = new SearchRequest();
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(nestedQuery);
    searchRequest.indices("idx_test");
    searchRequest.source(searchSourceBuilder);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.