[英]elasticsearch terms aggregation incorrect
我有一個存儲字符串數組的字段。 不同的文檔包含不同的字符串集。
ex: "ftypes": ["PDF", "TXT", "XML"]
現在我使用這個聚合查詢來分析每種文件類型的使用情況。
{
"aggs": {
"list": {
"terms": {
"field": "ftypes",
"min_doc_count": 0,
"size": 100000
}
}
}
}
result ==>
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 137265,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"list": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "PDF",
"doc_count": 134475
},
{
"key": "TXT",
"doc_count": 21312
},
{
"key": "XML",
"doc_count": 6597
},
{
"key": "JPG",
"doc_count": 1233
}
]
}
}
}
結果和預期的一樣正確。 但最近我在刪除 XML 文件支持后更新了這個字段。 所以文檔中沒有文件類型為 XML。 我可以從這個查詢中確認。
{
"query": {
"terms": {
"ftypes": ["XML"]
}
}
}
result ===>
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
總點擊數為零。 奇怪的是,當我再次執行上述聚合查詢時,我可以看到 XML 作為一個術語。 文檔計數為零。
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 137265,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"list": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "PDF",
"doc_count": 134475
},
{
"key": "TXT",
"doc_count": 21312
},
{
"key": "JPG",
"doc_count": 1233
},
{
"key": "XML",
"doc_count": 0
}
]
}
}
}
如果任何文檔中都不存在這個 XML 術語現在來自哪里? 有沒有我需要刪除的緩存?
我建議你參考這個
ES 在引擎蓋下使用 Lucene。 它們被稱為ghost terms
。 在這里, XML
是索引中的鬼詞。
用於查詢評分的聚合術語統計信息仍將反映已刪除的術語和文檔。 當合並完成時,術語統計數據會突然跳到更接近其真實值,從而改變命中分數。 實際上,這種影響很小,除非刪除的文檔與索引的 rest 有不同的統計信息。
所有后續搜索都只是跳過任何已刪除的文檔。 直到段被合並,被刪除的文檔消耗的字節才被回收。 同樣,僅在已刪除文檔中出現的任何術語(幽靈術語)在合並之前都不會被刪除。
該鏈接有足夠的理由進行此過程。
為避免 output 中的該術語,您需要設置min_doc_count:1
,它將獲取包含至少一個文檔的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.