簡體   English   中英

查詢復合文本搜索的文本搜索索引和時間戳 mongodb

[英]query text search index on compound text search and timestamp mongodb

我有一個集合,總共有大約6500萬條這樣的記錄

    {
    "_id" : ObjectId("5e0b814660da38d499ecf178"),
    "brands" : null,
    "client_id" : null,
    "code_co_owner" : ",7359562, ",
    "code_segment" : "7359562",
    "core" : "",
    "created" : "01-01-2020",
    "created_full" : "01-01-2020 00:00:27",
    "created_int" : NumberLong(1577811627),
    "email" : ",phamthanhlam17_gmail_com, "
.....
}

我在 (email, created_int): {"email": text, created_int: -1} 上創建了一個復合索引,用於搜索並過濾 created_int 范圍內的哪個名稱但我發現它的搜索性能很差。

我嘗試在查詢中使用解釋:

    db.getCollection('profile_20201').explain().find({"$text":{"$search":"phamthanhlam17_gmail_com"},
"created_int":{"$lte":1585627013, "$gte":1583035013}}).count()

解釋結果是:

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "indexFilterSet" : false,
        "parsedQuery" : {
            "$and" : [ 
                {
                    "created_int" : {
                        "$lte" : 1585627013.0
                    }
                }, 
                {
                    "created_int" : {
                        "$gte" : 1583035013.0
                    }
                }, 
                {
                    "$text" : {
                        "$search" : "phamthanhlam17_gmail_com",
                        "$language" : "english",
                        "$caseSensitive" : false,
                        "$diacriticSensitive" : false
                    }
                }
            ]
        },
        "winningPlan" : {
            "stage" : "COUNT",
            "inputStage" : {
                "stage" : "TEXT",
                "indexPrefix" : {},
                "indexName" : "email_text_created_int_-1",
                "parsedTextQuery" : {
                    "terms" : [ 
                        "phamthanhlam17_gmail_com"
                    ],
                    "negatedTerms" : [],
                    "phrases" : [],
                    "negatedPhrases" : []
                },
                "textIndexVersion" : 3,
                "inputStage" : {
                    "stage" : "TEXT_MATCH",
                    "inputStage" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                            "stage" : "OR",
                            "filter" : {
                                "$and" : [ 
                                    {
                                        "created_int" : {
                                            "$lte" : 1585627013.0
                                        }
                                    }, 
                                    {
                                        "created_int" : {
                                            "$gte" : 1583035013.0
                                        }
                                    }
                                ]
                            },
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                    "_fts" : "text",
                                    "_ftsx" : 1,
                                    "created_int" : -1.0
                                },
                                "indexName" : "email_text_created_int_-1",
                                "isMultiKey" : true,
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "backward",
                                "indexBounds" : {}
                            }
                        }
                    }
                }
            }
        },
        "rejectedPlans" : []
    },
    "serverInfo" : {
    },
    "ok" : 1.0
}

這是解釋統計:

    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "namespace",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "$and" : [ 
                {
                    "created_int" : {
                        "$lte" : 1585627013.0
                    }
                }, 
                {
                    "created_int" : {
                        "$gte" : 1583035013.0
                    }
                }, 
                {
                    "$text" : {
                        "$search" : "phamthanhlam17_gmail_com",
                        "$language" : "english",
                        "$caseSensitive" : false,
                        "$diacriticSensitive" : false
                    }
                }
            ]
        },
        "winningPlan" : {
            "stage" : "COUNT",
            "inputStage" : {
                "stage" : "TEXT",
                "indexPrefix" : {},
                "indexName" : "email_text_created_int_-1",
                "parsedTextQuery" : {
                    "terms" : [ 
                        "phamthanhlam17_gmail_com"
                    ],
                    "negatedTerms" : [],
                    "phrases" : [],
                    "negatedPhrases" : []
                },
                "textIndexVersion" : 3,
                "inputStage" : {
                    "stage" : "TEXT_MATCH",
                    "inputStage" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                            "stage" : "OR",
                            "filter" : {
                                "$and" : [ 
                                    {
                                        "created_int" : {
                                            "$lte" : 1585627013.0
                                        }
                                    }, 
                                    {
                                        "created_int" : {
                                            "$gte" : 1583035013.0
                                        }
                                    }
                                ]
                            },
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                    "_fts" : "text",
                                    "_ftsx" : 1,
                                    "created_int" : -1.0
                                },
                                "indexName" : "email_text_created_int_-1",
                                "isMultiKey" : true,
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "backward",
                                "indexBounds" : {}
                            }
                        }
                    }
                }
            }
        },
        "rejectedPlans" : []
    },
    "executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 0,
        "executionTimeMillis" : 1499057,
        "totalKeysExamined" : 72544123,
        "totalDocsExamined" : 39448083,
        "executionStages" : {
            "stage" : "COUNT",
            "nReturned" : 0,
            "executionTimeMillisEstimate" : 1483861,
            "works" : 72544124,
            "advanced" : 0,
            "needTime" : 72544123,
            "needYield" : 0,
            "saveState" : 578233,
            "restoreState" : 578233,
            "isEOF" : 1,
            "invalidates" : 0,
            "nCounted" : 39448083,
            "nSkipped" : 0,
            "inputStage" : {
                "stage" : "TEXT",
                "nReturned" : 39448083,
                "executionTimeMillisEstimate" : 1475831,
                "works" : 72544124,
                "advanced" : 39448083,
                "needTime" : 33096040,
                "needYield" : 0,
                "saveState" : 578233,
                "restoreState" : 578233,
                "isEOF" : 1,
                "invalidates" : 0,
                "indexPrefix" : {},
                "indexName" : "email_text_created_int_-1",
                "parsedTextQuery" : {
                    "terms" : [ 
                        "phamthanhlam17_gmail_com"
                    ],
                    "negatedTerms" : [],
                    "phrases" : [],
                    "negatedPhrases" : []
                },
                "textIndexVersion" : 3,
                "inputStage" : {
                    "stage" : "TEXT_MATCH",
                    "nReturned" : 39448083,
                    "executionTimeMillisEstimate" : 1473041,
                    "works" : 72544124,
                    "advanced" : 39448083,
                    "needTime" : 33096040,
                    "needYield" : 0,
                    "saveState" : 578233,
                    "restoreState" : 578233,
                    "isEOF" : 1,
                    "invalidates" : 0,
                    "docsRejected" : 0,
                    "inputStage" : {
                        "stage" : "FETCH",
                        "nReturned" : 39448083,
                        "executionTimeMillisEstimate" : 1465951,
                        "works" : 72544124,
                        "advanced" : 39448083,
                        "needTime" : 33096040,
                        "needYield" : 0,
                        "saveState" : 578233,
                        "restoreState" : 578233,
                        "isEOF" : 1,
                        "invalidates" : 0,
                        "docsExamined" : 39448083,
                        "alreadyHasObj" : 0,
                        "inputStage" : {
                            "stage" : "OR",
                            "filter" : {
                                "$and" : [ 
                                    {
                                        "created_int" : {
                                            "$lte" : 1585627013.0
                                        }
                                    }, 
                                    {
                                        "created_int" : {
                                            "$gte" : 1583035013.0
                                        }
                                    }
                                ]
                            },
                            "nReturned" : 39448083,
                            "executionTimeMillisEstimate" : 439664,
                            "works" : 72544124,
                            "advanced" : 39448083,
                            "needTime" : 33096040,
                            "needYield" : 0,
                            "saveState" : 578233,
                            "restoreState" : 578233,
                            "isEOF" : 1,
                            "invalidates" : 0,
                            "dupsTested" : 72544123,
                            "dupsDropped" : 0,
                            "recordIdsForgotten" : 0,
                            "inputStage" : {
                                "stage" : "IXSCAN",
                                "nReturned" : 72544123,
                                "executionTimeMillisEstimate" : 291188,
                                "works" : 72544124,
                                "advanced" : 72544123,
                                "needTime" : 0,
                                "needYield" : 0,
                                "saveState" : 578233,
                                "restoreState" : 578233,
                                "isEOF" : 1,
                                "invalidates" : 0,
                                "keyPattern" : {
                                    "_fts" : "text",
                                    "_ftsx" : 1,
                                    "created_int" : -1.0
                                },
                                "indexName" : "email_text_created_int_-1",
                                "isMultiKey" : true,
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "backward",
                                "indexBounds" : {},
                                "keysExamined" : 72544123,
                                "seeks" : 1,
                                "dupsTested" : 72544123,
                                "dupsDropped" : 0,
                                "seenInvalidated" : 0
                            }
                        }
                    }
                }
            }
        }
    },
    "serverInfo" : {
    },
    "ok" : 1.0
}```

So, is the index is cover the query?

Or which index will give me better performance for this problem?

Thank you.

好吧,您似乎已經使用text創建了復合索引。 但在官方 MongoDB文檔中,它說:

復合索引可以包括與升序/降序索引鍵組合的文本索引鍵。 但是,這些復合索引具有以下限制:

  • 復合文本索引不能包含任何其他特殊索引類型,例如多鍵或地理空間索引字段。
  • 如果復合文本索引包括文本索引鍵之前的鍵,則要執行 $text 搜索,查詢謂詞必須包括前面鍵的相等匹配條件。 (您在這里使用范圍查詢)
  • 創建復合文本索引時,所有文本索引鍵必須在索引規范文檔中相鄰列出。

所以,這是第一個問題。


接下來,我希望您看一下prefixes ,它將幫助您了解如何在查詢中使用復合索引。

希望這可以幫助您理解問題:)

暫無
暫無

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

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