弹性搜索"和"具有多个值的运算符

时间:2016-04-03 21:38:30

标签: elasticsearch

我正在使用弹性搜索2.2版本并使用以下查询DSL:

{
  "query": {
    "match": {
      "product": {
        "query": "Razor 2004",
        "operator": "and"
      }
    }
  }
}

以下查询的输出将能够拾取其中包含Razor和2004的所有产品。 例如,以下搜索字符串结果有效:

"I am using Razor built in  2004"
"Razor 2004 is great"

但以下搜索字符串结果无效

"I am using Razor built in  2005"
"Razor is great"

该查询适用于一个搜索输入,但我如何修改多个值的查询,如

{
      "query": {
        "match": {
          "product": {
            "query": "Razor 2004","Shave 2015"
            "operator": "and"
          }
        }
      }
    }

现在我正在寻找字符串,其中包括" Razor"和" 2004"存在或刮胡子"和" 2015年在一个字符串。 我尝试了bool查询,但无法获得"和"喜欢搜索工作。我的bool查询看起来像这样:

{
          "query": {
              "query": {
                  "bool": {
                      "should": [
                          {
                              "match": {
                                  "product": "Razor 2004"
                              }
                          },
                          {
                              "match": {
                                  "product": "Shave 2015"
                              }
                          }
                      ]
                  }
              }
          }
      }

有没有办法提供"和"比如在具有多个IN值的字符串中搜索?

1 个答案:

答案 0 :(得分:2)

您只需将匹配查询中的combine运算符指定为AND。匹配查询的默认值为OR。

  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "product": {
              "query": "Razor 2004",
              "operator": "and"
            }
          }
        },
        {
          "match": {
            "product": {
              "query": "Shave 2015",
              "operator": "and"
            }
          }
        }
      ]
    }
  }