サンプラー集約
トップスコアのドキュメントのサンプルに対して、サブ集約の処理を制限するために使用されるフィルタリング集約です。
使用例:
- 低品質のマッチの非常に長いテールではなく、高い関連性のマッチに分析の焦点を絞る
- サンプルのみを使用して有用な結果を生成できる集約の実行コストを削減する例:
significant_terms
例:
人気のある用語javascript
または希少な用語kibana
に対するStackOverflowデータのクエリは、多くのドキュメントにマッチします - そのほとんどはKibanaという単語を欠いています。私たちのクエリの最も興味深い部分にマッチする可能性が高いトップスコアのドキュメントにsignificant_terms
集約を焦点を合わせるために、サンプルを使用します。
Python
resp = client.search(
index="stackoverflow",
size="0",
query={
"query_string": {
"query": "tags:kibana OR tags:javascript"
}
},
aggs={
"sample": {
"sampler": {
"shard_size": 200
},
"aggs": {
"keywords": {
"significant_terms": {
"field": "tags",
"exclude": [
"kibana",
"javascript"
]
}
}
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'stackoverflow',
size: 0,
body: {
query: {
query_string: {
query: 'tags:kibana OR tags:javascript'
}
},
aggregations: {
sample: {
sampler: {
shard_size: 200
},
aggregations: {
keywords: {
significant_terms: {
field: 'tags',
exclude: [
'kibana',
'javascript'
]
}
}
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "stackoverflow",
size: 0,
query: {
query_string: {
query: "tags:kibana OR tags:javascript",
},
},
aggs: {
sample: {
sampler: {
shard_size: 200,
},
aggs: {
keywords: {
significant_terms: {
field: "tags",
exclude: ["kibana", "javascript"],
},
},
},
},
},
});
console.log(response);
コンソール
POST /stackoverflow/_search?size=0
{
"query": {
"query_string": {
"query": "tags:kibana OR tags:javascript"
}
},
"aggs": {
"sample": {
"sampler": {
"shard_size": 200
},
"aggs": {
"keywords": {
"significant_terms": {
"field": "tags",
"exclude": [ "kibana", "javascript" ]
}
}
}
}
}
}
コンソール-結果
{
...
"aggregations": {
"sample": {
"doc_count": 200,
"keywords": {
"doc_count": 200,
"bg_count": 650,
"buckets": [
{
"key": "elasticsearch",
"doc_count": 150,
"score": 1.078125,
"bg_count": 200
},
{
"key": "logstash",
"doc_count": 50,
"score": 0.5625,
"bg_count": 50
}
]
}
}
}
}
合計で200のドキュメントがサンプリングされました。ネストされたsignificant_terms集約を実行するコストは、 したがって制限され、無制限ではありませんでした。 |
#### Python
``````python
resp = client.search(
index="stackoverflow",
size="0",
query={
"query_string": {
"query": "tags:kibana OR tags:javascript"
}
},
aggs={
"low_quality_keywords": {
"significant_terms": {
"field": "tags",
"size": 3,
"exclude": [
"kibana",
"javascript"
]
}
}
},
)
print(resp)
`
Ruby
response = client.search(
index: 'stackoverflow',
size: 0,
body: {
query: {
query_string: {
query: 'tags:kibana OR tags:javascript'
}
},
aggregations: {
low_quality_keywords: {
significant_terms: {
field: 'tags',
size: 3,
exclude: [
'kibana',
'javascript'
]
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "stackoverflow",
size: 0,
query: {
query_string: {
query: "tags:kibana OR tags:javascript",
},
},
aggs: {
low_quality_keywords: {
significant_terms: {
field: "tags",
size: 3,
exclude: ["kibana", "javascript"],
},
},
},
});
console.log(response);
コンソール
POST /stackoverflow/_search?size=0
{
"query": {
"query_string": {
"query": "tags:kibana OR tags:javascript"
}
},
"aggs": {
"low_quality_keywords": {
"significant_terms": {
"field": "tags",
"size": 3,
"exclude": [ "kibana", "javascript" ]
}
}
}
}
コンソール-結果
{
...
"aggregations": {
"low_quality_keywords": {
"doc_count": 600,
"bg_count": 650,
"buckets": [
{
"key": "angular",
"doc_count": 200,
"score": 0.02777,
"bg_count": 200
},
{
"key": "jquery",
"doc_count": 200,
"score": 0.02777,
"bg_count": 200
},
{
"key": "logstash",
"doc_count": 50,
"score": 0.0069,
"bg_count": 50
}
]
}
}
}
shard_size
shard_size
パラメータは、各シャードで処理されるサンプルに収集されるトップスコアのドキュメントの数を制限します。デフォルト値は100です。
制限事項
breadth_first集約の下にネストできません
品質ベースのフィルタであるサンプラー集約は、各ドキュメントに対して生成された関連スコアにアクセスする必要があります。したがって、collect_mode
がデフォルトのdepth_first
モードからbreadth_first
に切り替えられたterms
集約の下にネストすることはできません。これによりスコアが破棄されます。この状況ではエラーが発生します。