如何使用查询字符串查询表达可选匹配

时间:2018-11-05 22:30:30

标签: elasticsearch elasticsearch-query

我有一个使用query string dsl的查询,我希望它返回与所有三个断言都匹配的结果。 (状态=有效,价格= 100,语言= zh)。

如何使language参数成为可选参数,如果不匹配,则得分更低,而根本不匹配?

(status:"active") AND (price:100) AND (language:"en")

1 个答案:

答案 0 :(得分:1)

您可以尝试

(status:active AND language:en) OR (price:100 AND language:en)

或更短的版本:

+status:active +price:100 language:en

使用boolmatch查询重写的等效查询是这样的:

{
  "bool": {
    "must": [
      {
        "match": {
          "status": "active"
        }
      },
      {
        "match": {
          "price": 100
        }
      }
    ],
    "should": {
      "match": {
        "language": "en"
      }
    }
  }
}