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

col17t5w  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(235)

我一直在为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搜索。

cyvaqqii

cyvaqqii1#

您是否可以尝试使用以下查询..

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

相关问题