我在查看 OpenSearch 文档和 stackoverflow 问题时一直摸不着头脑。我怎样才能做这样的事情:
选择文档
WHERE studentId in [1234, 5678] OR applicationId in [2468, 1357]
。
只要
studentId
与提供的值之一完全匹配,或者 applicationId
与提供的值之一完全匹配,则该文档应包含在响应中。
当我想搜索单个字段的多个值并获得完全匹配时,以下方法有效:
{
"must":[
{
"terms": {
"studentId":["1234", "5678"]
}
}
]
}
这会在
studentId in [1234, 5678]
上找到我完全匹配的内容。
如果我尝试添加条件来查找(逻辑或)
applicationId in [2468, 1357]
,那么以下内容将不起作用:
{
"must":[
{
"terms": {
"studentId":["1234", "5678"]
}
},
{
"terms": {
"applicationId":["2468", "1357"]
}
}
]
}
因为这将对两个查询执行逻辑与。我想要逻辑或。
我无法使用
should
,因为这会返回不相关的结果。以下对我不起作用:
{
"should":[
{
"terms": {
"studentId":["1234", "5678"]
}
},
{
"terms": {
"applicationId":["2468", "1357"]
}
}
]
}
这似乎返回所有结果,按相关性排名。我发现返回的结果实际上并不匹配,尽管这是一个
terms
搜索。
您可以尝试以下查询吗..
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"studentId":["1234", "5678"]
}
}
]
}
},
{
"bool": {
"must": [
{
"terms": {
"applicationId":["2468", "1357"]
}
}
]
}
}
]
}
}
}
嘿伙计,你能给我们看看你最终使用的查询吗?我正在尝试在这里做同样的事情