显著文本聚合
significant_text
聚合类似于 significant_terms
聚合,但它适用于原始文本字段。显著文本使用统计分析测量前景和背景集之间流行度的变化。例如,当你查找股票代码 TSLA 时,它可能会建议 Tesla。
significant_text
聚合会即时重新分析源文本,过滤掉重复段落、样板页眉和页脚等嘈杂数据,否则这些数据可能会扭曲结果。
重新分析高基数数据集可能是非常耗费 CPU 的操作。我们建议在采样器聚合中使用 significant_text
聚合,将分析限制在一小部分匹配度最高的文档中,例如 200 个。
你可以设置以下参数
min_doc_count
- 返回匹配超过配置数量的顶部匹配项的结果。我们建议不要将min_doc_count
设置为 1,因为它倾向于返回拼写错误或打字错误的术语。找到一个术语的多个实例有助于强调其显著性不是一次性意外的结果。默认值 3 用于提供最小的证据权重。shard_size
- 设置较高的值会增加稳定性(和准确性),但会牺牲计算性能。shard_min_doc_count
- 如果你的文本包含许多低频词且你对此不感兴趣(例如错别字),则可以设置shard_min_doc_count
参数,在分片级别过滤掉候选术语,从而以合理的确定性确保即使合并本地显著文本频率后也不会达到所需的min_doc_count
。默认值为 1,除非你明确设置,否则它不会产生影响。我们建议将此值设置得远低于min_doc_count
值。
假设你有一个 OpenSearch 集群中索引了莎士比亚的全部作品。你可以在 text_entry
字段中找到与单词“breathe”相关的显著文本
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": "breathe"
}
},
"aggregations": {
"my_sample": {
"sampler": {
"shard_size": 100
},
"aggregations": {
"keywords": {
"significant_text": {
"field": "text_entry",
"min_doc_count": 4
}
}
}
}
}
}
示例响应
"aggregations" : {
"my_sample" : {
"doc_count" : 59,
"keywords" : {
"doc_count" : 59,
"bg_count" : 111396,
"buckets" : [
{
"key" : "breathe",
"doc_count" : 59,
"score" : 1887.0677966101694,
"bg_count" : 59
},
{
"key" : "air",
"doc_count" : 4,
"score" : 2.641295376716233,
"bg_count" : 189
},
{
"key" : "dead",
"doc_count" : 4,
"score" : 0.9665839666414213,
"bg_count" : 495
},
{
"key" : "life",
"doc_count" : 5,
"score" : 0.9090787433467572,
"bg_count" : 805
}
]
}
}
}
}
与 breathe
最相关的显著文本是 air
、dead
和 life
。
significant_text
聚合有以下限制
- 不支持子聚合,因为子聚合会带来高内存成本。作为变通方法,你可以使用包含子句和子聚合的
terms
聚合添加后续查询。 - 不支持嵌套对象,因为它使用文档 JSON 源。
- 文档计数可能存在一些(通常很小)不准确性,因为它基于对每个分片返回的样本求和。你可以使用
shard_size
参数来微调准确性和性能之间的权衡。默认情况下,shard_size
设置为 -1,以自动估算分片数量和size
参数。
背景术语频率的统计信息的默认来源是整个索引。你可以使用背景过滤器缩小此范围以获得更集中的结果
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": "breathe"
}
},
"aggregations": {
"my_sample": {
"sampler": {
"shard_size": 100
},
"aggregations": {
"keywords": {
"significant_text": {
"field": "text_entry",
"background_filter": {
"term": {
"speaker": "JOHN OF GAUNT"
}
}
}
}
}
}
}
}