有没有办法计算ElasticSearch或Tire中索引的所有元素?

时间:2011-11-01 16:40:53

标签: ruby elasticsearch

如果没有像

那样进行搜索,那么拥有一些元素会很不错
Obj.search("id:*").count

这可能吗?

7 个答案:

答案 0 :(得分:10)

在ElasticSearch中,您可以使用count API

计算所有元素
curl -XGET http://localhost:9200/index/_count

查看其网站上的Count API文档。

答案 1 :(得分:9)

刚从卡米那里得到了一个暗示。 count API现已上市。

您可以执行以下操作:

s = Tire.search 'articles-test', :search_type => 'count' do
  query { term :tags, 'ruby' }
end

仅定义了s.results.total

见这里:https://github.com/karmi/tire/blob/master/test/integration/count_test.rb

答案 2 :(得分:8)

首先,您应该使用match_all查询:MyModel.search( { query { all } }).results.total。 (在Lucene中,不惜一切代价避免使用通配符。)

目前,Tire没有公开“count”API。那会改变。

答案 3 :(得分:3)

如果您使用的是gem' elasticsearch-model',这里有一个不错的内容:

Elasticsearch::Model.client.count(index: 'your_index_name_here')['count']

答案 4 :(得分:1)

您也可以在elasticsearch-model gem中执行此操作:

Article.search("cats", search_type: 'count').results.total
# => 2026

你不会导致获取......

Article.search("cats", search_type: 'count').map {|r| r.title}
# => []

答案 5 :(得分:0)

如果您想获取索引中的文档数量,您也可以检查index stats,如下所示:

curl -XGET localhost:9200/_stats

结果您将获得多个文档/已删除的文档(文档尚未合并)。

答案 6 :(得分:0)

来自控制台:

Model.search("*:*").results.total

也许可以帮助别人;)