如何在ElasticSearch中获取倒排索引的大小

时间:2014-08-31 22:49:49

标签: elasticsearch

我认为这个标题非常明显。据我所知indices-stats只返回集合中的文档数量,而不是令牌/术语的数量。

编辑:

这是关于我的索引的更多信息;它包含索引的医学出版物,其中包含以下映射:

{
    u'papers': {
        u'properties': {
            u'article_abstract': {
                u'type': 
                u'string'
            },
            u'article_sections': {
                u'type': 
                u'string'
            },
            u'article_text': {
                u'type': 
                u'string'
            },
            u'article_title': {
                u'type': 
                u'string'
            },
            u'keyword_group': {
                u'type': 
                u'string'
            },
            u'references': {
                u'type': 
                u'string'
            }
        }
    }
}

我正在寻找的是在索引中的所有字段中获取唯一字词数的方法。

2 个答案:

答案 0 :(得分:0)

索引的文件大小可以从同一indices-stats api的store字段中提取,例如

{ "docs": { "count": 1886, "deleted": 1557 }, "store": { "size_in_bytes": 519544594, "throttle_time_in_millis": 0 }, ...(skipped)

但是如果你想要一个索引的总令牌数量,我认为不存在这样的api,因为它并不意味着什么。如果您想要这个号码,我认为您需要使用script_fieldaggregation进行计算。

修改

根据您的架构,令牌计数可以按如下方式计算:

{
"query" : {
    "match_all" : { }
},
 "aggs" : {
    "summation" : { "sum" : {  "script" : "doc['article_abstract'].values.length+doc['article_sections'].values.length" } }
}
} 

上面的查询只是计算字段'article_abstracts'和'article_sections'的标记大小,如你所见。我不确定有没有办法不“迭代”所有字段。但无论如何,你可以继续这样做。

答案 1 :(得分:0)

如果要查找索引中的唯一术语,则需要进行查询。要返回计数,您需要使用值计数聚合 - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-valuecount-aggregation.html

{
    "aggs" : {
        "grades_count" : { "value_count" : { "field" : "grade" } }
    }
}

如果您想要返回给定字段的不同字词,您可以执行以下聚合搜索:

curl -XPOST "http://localhost:9200/yourindex/_search?pretty" -d'
{
    "aggs" : {
        "aggname" : {
            "terms" : { "field" : "YourFieldName" }
        }
    }
}'

显然,如果你想在整个索引上返回不同的术语,我们需要一些关于你的架构的信息。