如何在 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
子句中包含条款查询,具体取决于您的用例。
上下文化:我有这个查询,我在两个字段中搜索一个术语,结果应该给我带来类似于通配符中插入的项目。但最终我会得到一个搜索词列表...
当我只得到 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
子句中包含条款查询,具体取决于您的用例。