带过滤器的 Elasticsearch bool 查询应该

Elasticsearch bool query with filter and should

我的主要目标是编写一个必须搜索搜索文本的查询,如果应用了装货港或卸货港的任何过滤器,那么它必须从搜索文本的结果中过滤掉它。

如果没有应用过滤器,则应该继续进行。

例如:我搜索牛仔裤,如果我应用过滤器,则装货港必须是印度,其卸货港必须是美国。

我试着写了这份报告,但没有给出合适的结果。

{
 "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": searchText
                }
              }
            ]
          }
        },
        {
          "terms": {
            "loadingPort":loadingPortArray
          }
        },
        {
          "terms": {
            "unloadingPort":unloadingPortArray
          }
        }
      ]
    }
  }
}

您的问题是您将所有 quires\filters 包装在 should 中,这意味着所有语句都由 OR 逻辑组合。如果需要 AND,则需要将语句包装在 must 中。

顺便说一下,您没有使用过滤器,您使用的是 term 查询。 elasticsearch 中的查询和过滤器之间存在巨大差异。要使用过滤器,您需要使用带过滤器的 bool 查询。

{
 "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [
              {
                "query_string": {
                  "query": searchText
                }
              }
            ]
          }
        }        
      ],
      "filter": {
          "bool": {
              "must": [
                  {
                    "terms": {
                        "loadingPort":loadingPortArray
                    }
                  },
                  {
                    "terms": {
                        "unloadingPort":loadingPortArray
                    }
                  }
              ]
          }
      }
    }
  }
}