Home > Enterprise >  How to search for an array of terms, in elasticsearch?
How to search for an array of terms, in elasticsearch?

Time:04-25

Contextualizing: I have this query that I search for a term, in two fields, and the result should bring me items that resemble the one inserted in the wildcard. But eventually I'll get a list of search terms...

I use this query to search when I get only 1 string:

    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "should": [
                            {
                                "wildcard": {
                                    "shortName": "BAN*"
                                }
                            },
                            {
                                "wildcard": {
                                    "name": "BAN*"
                                }
                            }
                        ]
                    }
                },
                {
                    "range": {
                        "dhCot": {
                            "gte": "2022-04-11T00:00:00.000Z",
                            "lt": "2022-04-12T00:00:00.000Z"
                        }
                    }
                }
            ]
        }
    },
    "aggs": {
        "articles_over_time": {
            "date_histogram": {
                "field": "dtBuy",
                "interval": "1H",
                "format": "yyyy-MM-dd:HH:mm:ssZ"
            },
            "aggs": {
                "documents": {
                    "top_hits": {
                        "size": 100
                    }
                }
            }
        }
    }
}

But in some moments, I will get an array of strings, like this ["BANANA","APPLE","ORANGE"]

So, how do I search for items that exactly match the items within the array? Is it possible?

The object inserted in elastic is this one:

{
    "name": "BANANA",
    "priceDay": 1,
    "priceWeek": 3,
    "variation": 2,
    "dataBuy":"2022-04-11T11:01:00.585Z",
    "shortName": "BAN"
}

CodePudding user response:

If you want to search for items that exactly match the items within the array, you can use the terms query

{
  "query": {
    "terms": {
      "name": ["BANANA","APPLE","ORANGE"]
    }
  }
}

You can include the terms query, in your existing query either in the should clause or must clause depending on your use case.

  • Related