有没有办法获得过滤器的命中数而不返回过滤器的所有结果

时间:2012-01-05 09:53:43

标签: ruby-on-rails elasticsearch

使用弹性搜索,我试图使用过滤器来计算两个相关模型中的链接数。

我的问题有很多票。

我有一个投票映射,它为每个投票的问题ID编制索引,并且正在进行

curl -XGET localhost:9200/votes/_search -d '{query : {"constant_score" : {"filter" : { "term" : {"question_id" : 5} }, "boost" : 1.0 } }}'

问题是这会返回所有结果。是否可以简单地获取一个计数?

1 个答案:

答案 0 :(得分:2)

只需在查询字符串中添加search_type=count

curl -XGET localhost:9200/votes/_search?search_type=count -d '{
    "query" : {
        "constant_score" : {
            "filter" : { "term" : {"question_id" : 5} }
        } 
    }
}'

就是说,正如@phoet建议的那样,你可能想要使用facet。

例如,对于前10个问题:

curl -XGET 'http://127.0.0.1:9200/votes/_search?pretty=1&search_type=count'  -d '
{
   "facets" : {
      "votes" : {
         "terms" : {
            "field" : "question_id"
         }
      }
   }
}
'

或者只是对于question_id 5:

curl -XGET 'http://127.0.0.1:9200/votes/_search?pretty=1&search_type=count'  -d '
{
   "query" : {
      "constant_score" : {
         "filter" : {
            "term" : {
               "question_id" : 5
            }
         }
      }
   },
   "facets" : {
      "votes" : {
         "terms" : {
            "field" : "question_id"
         }
      }
   }
}
'