如何在Elasticsearch中聚合时进行OR搜索?

时间:2017-01-03 22:04:19

标签: elasticsearch

我有这个查询,它使用文本" CAT DOG"获取所有推文的提及字段的聚合。如何编辑我的查询,以便获得包含" cat"的所有推文的聚合。或者"狗"。

{
    "size": 0,
    "query": {
        "filtered": {
           "query": {
                "match_all": {}
           },
           "filter": {"text" : "CAT DOG"}
        }
    },
    "aggs": {
        "tweet": {
            "terms": {
                "field": "hashtags",
                "size" : 50
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您需要使用should查询。 如果不清楚的事情可以随意询问。 请关注elasticsearch版本。

答案 1 :(得分:0)

查看multi_match查询是否有选项运算符,您应将其设置为,这意味着任何内容都应匹配。

{
    "size": 0,
    "query": {
       "multi_match" : {
         "query":      "CAT DOG",
         "fields":     [ "text"],
         "operator":   "or" 
     }
  },
    "aggs": {
        "tweet": {
            "terms": {
                "field": "hashtags",
                "size" : 50
            }
        }
    }
}

你的案例中的其他选项是bool查询,但是你应该知道它会搜索术语,这意味着如果你使用默认分析器它会小写令牌并且匹配它们你必须小写用户输入,你也要负责从用户输入中分割标记。

{
    "size": 0,
    "query": {
      "bool" : {
      "should" : [
        { "term" : { "text": "cat" } },
        { "term" : { "text" : "dog" } }
      ],
    }
  }
  },
    "aggs": {
        "tweet": {
            "terms": {
                "field": "hashtags",
                "size" : 50
            }
        }
    }
}