我想计算每个分析的标记。
首先,我尝试了以下代码:
映射:
{
"docs": {
"mappings": {
"doc": {
"dynamic": "false",
"properties": {
"text": {
"type": "string",
"analyzer": "kuromoji"
}
}
}
}
}
}
查询:
{
"query": {
"match_all": {}
},
"aggs": {
"word-count": {
"terms": {
"field": "text",
"size": "1000"
}
}
},
"size": 0
}
我在插入数据后查询了索引,得到了以下结果:
{
"took": 41
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 10000,
"max_score": 0,
"hits": []
},
"aggregations": {
"word-count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 36634,
"buckets": [
{
"key": "はい",
"doc_count": 4734
},
{
"key": "いただく",
"doc_count": 2440
},
...
]
}
}
}
不幸的是,术语聚合仅提供doc_count。这不是一个字数。因此,我认为使用_index['text']['TERM'].df()
和_index['text']['TERM'].ttf()
获取近似字数的方法。
也许近似字数是以下等式:
WordCount = doc_count['TERM'] / _index['text']['TERM'].df() * _index['text']['TERM'].ttf()
' TERM'桶是关键。我尝试编写一个脚本化的度量标准聚合,但我不知道如何在桶中获取密钥。
{
"query": {
"match_all": {}
},
"aggs": {
"doc-count": {
"terms": {
"field": "text",
"size": "1000"
}
},
"aggs": {
"word-count": {
"scripted_metric": {
// ???
}
}
}
},
"size": 0
}
如何获取存储桶中的密钥? 如果不可能,我怎样才能获得分析的字数?
答案 0 :(得分:0)
您可以尝试使用token count数据类型。只需在text
字段中添加该类型的子字段:
{
"docs": {
"mappings": {
"doc": {
"dynamic": "false",
"properties": {
"text": {
"type": "string",
"analyzer": "kuromoji"
},
"fields": {
"nb_tokens": {
"type": "token_count",
"analyzer": "kuromoji"
}
}
}
}
}
}
}
然后,您可以在汇总中使用text.nb_tokens
。
答案 1 :(得分:0)
你可以尝试dynamic_scripting
,虽然这会影响效果。
{
"query": {
"match_all": {}
},
"aggs": {
"word-count": {
"terms": {
"script": "_source.text",
"size": "1000"
}
}
},
"size": 0
}