簡體   English   中英

Elasticsearch:擁有更多值或更多字段更好嗎?

[英]Elasticsearch: better to have more values or more fields?

假設索引中包含描述車輛的文件。

您的索引需要處理兩種不同類型的車輛:摩托車和汽車。

從性能角度來看,以下哪個映射更好? (出於我的目的,需要嵌套)

    "vehicle": {
        "type": "nested",
        "properties": {
            "car": {
                "properties": {
                    "model": {
                        "type": "string"
                    },
                    "cost": {
                        "type": "integer"
                    }
                }
            },
            "motorcycle": {
                "properties": {
                    "model": {
                        "type": "string"
                    },
                    "cost": {
                        "type": "integer"
                    }
                }
            }
        }
    }

或這一個:

"vehicle": {
    "type": "nested",
    "properties": {

        "model": {
            "type": "string"
        },
        "cost": {
            "type": "integer"
        },
        "vehicle_type": {
            "type": "string"     ### "car", "motorcycle"
        }

    }
}

第二個更易讀,更薄。

但是我的缺點是,當我進行查詢時,如果只想關注“汽車”,則需要將此條件作為查詢的一部分。

如果使用第一個映射,則只需要直接訪問存儲的字段,而不會增加查詢的開銷。

第一個映射是將汽車和摩托車隔離在不同的領域,這種映射更有可能更快。 原因是,您已經知道要應用的過濾器更少,並且由於查詢的選擇性增加(例如,給定的vehicle.car.model值的文檔比vehicle.model

另一種選擇是創建兩個不同的索引carmotorcycle ,可能具有相同的索引模板

在Elasticsearch中,每個分片由單線程處理查詢。 這意味着,如果將索引一分為二,並在單個請求中查詢兩個索引,它將並行執行。

因此,當僅需要查詢汽車或摩托車之一時,由於索引較小,因此速度更快。 當涉及到汽車和摩托車時,通過使用更多線程也可以更快。

編輯:您應該知道的后一種選擇的一個缺點是,內部lucene詞典將被復制,並且如果汽車和摩托車中的值完全相同,它會使索引項的列表加倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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