2016-03-01 76 views
1

假设,我的表有两个字段:用户名和年龄 我想检查列表用户名:[约翰,玛丽,吉姆],该用户有“年龄”是20。我做? 我想我会合并以下2个查询:Elasticsearch:合并条件查询和匹配查询

  • 期限查询: { “术语”:{ “用户”: “约翰”, “玛丽”, “吉姆”] } }

  • 和匹配查询:

    { “查询”:{ “匹配”:{ “年龄”:20 }} }

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

回答

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这里。

+0

非常感谢。我知道了:) –

+0

@TriPham很高兴我能帮上忙! – BrookeB