java中的ap是什么术语
我现在已经几次使用Elasticsearch来分析会议的Twitter数据 。 流行的主题标签和提及可以使用多个方面进行提及,它们可以显示会议中的热门话题。 但是您可以走得更远,看看是什么使每个主题标签变得特别。 在本文中,我想向您展示Elasticsearch 1.1可用的重要术语聚合 。 我使用的是去年Devoxx的推文,因为这些推文包含足够的文档供您玩耍。
集合体
Elasticsearch 1.0引入了聚合 ,可以类似于构面使用,但功能要强大得多。 要了解为什么这些有用,让我们退后一步,看看通常用于提取统计值和分布的方面。 构面的一个有用示例是#标签的总数:
curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'
{
"size": 0,
"facets": {
"hashtags": {
"terms": {
"field": "hashtag.text",
"size": 10,
"exclude": [
"devoxx", "dv13"
]
}
}
}
}'
我们请求一个称为hashtags的构面,该构面使用hashtag.text的术语,并返回带有计数的10个最高值。 我们将话题标签devoxx和dv13排除在外,因为它们非常频繁。 这是带有流行标签的结果的摘录:
"facets": {
"hashtags": {
"_type": "terms",
"missing": 0,
"total": 19219,
"other": 17908,
"terms": [
{
"term": "dartlang",
"count": 229
},
{
"term": "java",
"count": 216
},
{
"term": "android",
"count": 139
},
[...]
除了我们在这里检索的统计信息外,构面通常用于提供搜索结果的细化。 例如,常见的用途是在电子商务网站上显示产品的类别或功能。
从Elasticsearch 1.0开始,您可以通过使用一种新的聚合(在本例中为术语聚合)来具有相同的行为:
curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'
{
"size" : 0,
"aggs" : {
"hashtags" : {
"terms" : {
"field" : "hashtag.text",
"exclude" : "devoxx|dv13"
}
}
}
}'
现在,我们不再请求构面,而是请求字段hashtag.text的术语聚合。 现在,排除是基于正则表达式而不是列表。 结果看起来类似于构面返回值:
"aggregations": {
"hashtags": {
"buckets": [
{
"key": "dartlang",
"doc_count": 229
},
{
"key": "java",
"doc_count": 216
},
{
"key": "android",
"doc_count": 139
},
[...]
每个值构成一个所谓的存储桶,其中包含一个键和一个doc_count。
但是聚合不仅可以替代构面。 可以组合多个聚合以提供有关不同字段分布的更多信息。 例如,我们可以通过为字段user.screen_name添加第二项聚合来查看使用特定主题标签的用户:
curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'
{
"size" : 0,
"aggs" : {
"hashtags" : {
"terms" : {
"field" : "hashtag.text",
"exclude" : "devoxx|dv13"
},
"aggs" : {
"hashtagusers" : {
"terms" : {
"field" : "user.screen_name"
}
}
}
}
}
}'
使用此嵌套聚合,我们现在获得每个主题标签的存储桶列表。 该列表包含使用井号的用户。 这是#scala主题标签的简短摘录:
"key": "scala",
"doc_count": 130,
"hashtagusers": {
"buckets": [
{
"key": "jaceklaskowski",
"doc_count": 74
},
{
"key": "ManningBooks",
"doc_count": 3
},
[...]
我们可以看到有一个用户负责一半的标签。 非常敬业的用户。
使用聚合,我们可以获得单面无法获得的信息。 如果您对总体聚合的更多详细信息或我在这里没有涉及的指标聚合感兴趣, 克里斯·辛普森 ( Chris Simpson)在该功能上写了一篇不错的文章 , Found博客上有一篇不错的视觉文章 ,当然这里还有一篇 。 在Elasticsearch网站上有官方文档 。
重要条款
Elasticsearch 1.1包含一个新的聚合, 重要术语“聚合” 。 它使您可以做一些非常有用的事情:对于创建的每个存储桶,您可以看到使该存储桶特别的术语。
通过将前景频率(这是您感兴趣的存储桶的频率)与背景频率(对于Elasticsearch 1.1始终是完整索引的频率)进行比较来计算重要项。 这意味着它将收集当前存储桶中频率较高但不包含完整索引的所有频率较高的结果。
对于我们的示例,我们现在可以检查经常被提及的主题标签。 术语聚合可以做到这一点。 有效条款将仅返回某些用户经常出现的条款,而不是所有用户经常出现的条款。 这就是马克·哈伍德(Mark Harwood)所说的罕见之处
。
curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'
{
"size" : 0,
"aggs" : {
"mentions" : {
"terms" : {
"field" : "mention.screen_name"
},
"aggs" : {
"uncommonhashtags" : {
"significant_terms" : {
"field" : "hashtag.text"
}
}
}
}
}
}'
我们要求所提及的用户进行常规条款汇总。 使用嵌套的ificant_terms聚合,我们可以看到通常与所提到的用户一起使用但在整个索引中不经常使用的任何标签。 这是Brian Goetz的摘录:
{
"key": "BrianGoetz",
"doc_count": 173,
"uncommonhashtags": {
"doc_count": 173,
"buckets": [
{
"key": "lambda",
"doc_count": 13,
"score": 1.8852860861614915,
"bg_count": 33
},
{
"key": "jdk8",
"doc_count": 8,
"score": 0.7193691737111163,
"bg_count": 32
},
{
"key": "java",
"doc_count": 21,
"score": 0.6601749139630457,
"bg_count": 216
},
{
"key": "performance",
"doc_count": 4,
"score": 0.6574225667412876,
"bg_count": 9
},
{
"key": "keynote",
"doc_count": 9,
"score": 0.5442707998673785,
"bg_count": 52
},
[...]
您会看到,Brian Goetz在主题演讲中有很多标签是针对很多的,而不是整个索引所共有的。
一些重要的术语聚合我们可以看到的一些想法:
- 查找经常使用主题标签的用户。
- 查找经常与特定主题标签一起使用的术语。
- 查找特定用户使用的术语。
- …
除了这些令人印象深刻的分析功能外,重要术语也可以用于搜索应用程序。 Elasticsearch文档本身提供了一个有用的示例:如果用户搜索“禽流感”,则会自动显示指向H5N1的搜索链接,这在结果文档中应该很常见,但在整个语料库中并不常见。
结论
Elasticsearch再次使用重要术语添加了一项功能,该功能很可能会提供令人惊讶的新应用程序和搜索用例。 它不仅对分析很重要,而且还可以用于改进经典搜索应用程序。 Mark Harwood 在Elasticsearch博客上收集了一些非常有趣的用例 。 如果您想阅读有关该主题的另一篇文章,可以在QBox-Blog上看到该文章,其中介绍了重要术语以及百分位数和基数聚合。
java中的ap是什么术语