如何在 elasticsearch 中搜索一系列术语?

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

上下文化:我有这个查询,我在两个字段中搜索一个术语,结果应该给我带来类似于通配符中插入的项目。但最终我会得到一个搜索词列表...

当我只得到 1 个字符串时,我使用此查询进行搜索:

    "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
                    }
                }
            }
        }
    }
}

但在某些时候,我会得到一个字符串数组,像这样["BANANA","APPLE","ORANGE"]

那么,如何搜索与数组中的项目完全匹配的项目?可能吗?

elastic中插入的对象是这个:

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

如果要搜索与数组中的项目完全匹配的项目,可以使用 terms query

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

您可以在现有查询的 should 子句或 must 子句中包含条款查询,具体取决于您的用例。