Elasticsearch:合并术语查询和匹配查询

时间:2016-03-01 02:28:47

标签: elasticsearch match term

假设,我的表有2个字段:user_name和age 我想查看列表用户名:[john,mary,jim],该用户有"年龄"是20.我该怎么办? 我想我将在下面合并两个查询:

  • 术语查询:     {       "术语#34; :{         "用户" :[" john"," mary"," jim" ]       }     }

  • 并匹配查询:

    {     "查询":{         "匹配":{            "年龄":20         }     } }

但我不确定。请帮我。感谢。

1 个答案:

答案 0 :(得分:3)

terms查询似乎适合该名称。但是,我建议使用term过滤器作为“年龄”,因为它是一个数值。通常,match查询适用于您计划进行全文搜索的analyzed字段。

例如,您可以使用filtered查询将两个搜索条件链接在一起,如下所示:

{
  "query": {
    "filtered": {
      "query": {
        "terms": {
          "user_name": ["john","mary","jim"]
        }
      },
      "filter": {
        "term": {
          "age": 20
        }
      }
    }
  }
}

另一种可能性是使用bool查询来合并搜索条件。例如。

{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "user_name": ["john","mary","jim"]
          }
        },
        {
          "term": {
            "age": 20
          }
        }
      ]
    }
  }
}

在这里查看documentation for Bool Query