簡體   English   中英

elasticsearch 術語聚合不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM