ElasticSearch / OpenSearch 使用逻辑 OR 进行术语搜索

问题描述 投票:0回答:2

我在查看 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
搜索。

elasticsearch lucene opensearch
2个回答
1
投票

您可以尝试以下查询吗..

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "terms": {
                  "studentId":["1234", "5678"]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "terms": {
                  "applicationId":["2468", "1357"]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

0
投票

嘿伙计,你能给我们看看你最终使用的查询吗?我正在尝试在这里做同样的事情

© www.soinside.com 2019 - 2024. All rights reserved.