# TermQuery upgrade

**URL:** <https://discuss.elastic.co/t/termquery-upgrade/358110>\
**Category:** Elasticsearch\
**Tags:** language-clients\
**Created:** [April 24, 2024, 10:16am UTC](https://discuss.elastic.co/t/termquery-upgrade/358110 "2024-04-24T10:16:07Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ajt001](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@ajt001](https://discuss.elastic.co/u/ajt001)\
**Post date:** [April 24, 2024, 10:16am UTC](https://discuss.elastic.co/t/termquery-upgrade/358110/1 "2024-04-24T10:16:07Z")

</div>

Hi, I'm working through an upgrade and have an existing function using List for values in a TermQueryBuilder.  
I've found online a method to convert the values into a FieldValue, but I'm not sure how to handle the case when Object is passed (due to how the code might send in any data type).

Any guides?

```auto
fun getTermFilter(searchType: SearchType?, field: String, values: List<Object>): Query? {
    if (values.isEmpty()) return null

    val valuesToUse = TermsQueryField.Builder()
        .value(values.stream().map(FieldValue::of).toList())
        .build()
    val builder = TermsQuery.of { t -> t
        .field(field)
        .terms(valuesToUse) }._toQuery()

```

---

<div class="post-metadata">

**Author:** ![ltrotta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ltrotta/32/124003_2.png) [@ltrotta](https://discuss.elastic.co/u/ltrotta)\
**Post date:** [April 24, 2024, 3:38pm UTC](https://discuss.elastic.co/t/termquery-upgrade/358110/2 "2024-04-24T15:38:56Z")

</div>

Hi!  
I think you got it, putting everything together in a search request should look something like:

```auto
        var list = new ArrayList<Object>();
        SearchRequest.of(s -> s
            .index("test")
            .query(q -> q
                .terms(t -> t
                    .field("field")
                    .terms(tt -> tt.value(list.stream().map(FieldValue::of).toList())))));

```

---

<div class="post-metadata">

**Author:** ![ajt001](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@ajt001](https://discuss.elastic.co/u/ajt001)\
**Post date:** [April 24, 2024, 11:27pm UTC](https://discuss.elastic.co/t/termquery-upgrade/358110/3 "2024-04-24T23:27:03Z")

</div>

Thanks for replying @ltrotta - but the issue is still that this bit of code fails, as  
FieldValue::of can't be resolved, since FieldValue doesn't operate on an Object (which is in the list).  
?

---

<div class="post-metadata">

**Author:** ![ltrotta](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ltrotta/32/124003_2.png) [@ltrotta](https://discuss.elastic.co/u/ltrotta)\
**Post date:** [April 26, 2024, 8:21am UTC](https://discuss.elastic.co/t/termquery-upgrade/358110/4 "2024-04-26T08:21:32Z")

</div>

FieldValue does operate on Objects, it converts them directly to Json, so they need to be serializable for it to work.

---

<div class="post-metadata">

**Author:** ![ajt001](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@ajt001](https://discuss.elastic.co/u/ajt001)\
**Post date:** [May 18, 2024, 5:04am UTC](https://discuss.elastic.co/t/termquery-upgrade/358110/5 "2024-05-18T05:04:03Z")

</div>

@ltrotta would you have an example please?  
Thanks!
