Stimmt es, dass bei Verwendung eines Textindex kein zusammengesetzter Index verwendet werden kann?
Weil ich die folgende Abfrageanweisung verwendet habe, aber nur die Textindizierung durchgeführt habe:
db.tests.find({$text:{$search:'zhangshan'},'age':5,'city':'beijing'}
Beim Durchsehen von „explain“ hat er den Text indiziert. Dann filtern Sie weitere Konditionen aus diesem Index heraus!
Was soll ich also tun, um sie alle zu indizieren?
Ich habe darüber nachgedacht, einen Textindex für alle Felder zu erstellen. Aufgrund der großen Datenmenge habe ich es nicht ausprobiert. Ich möchte fragen, ob dies machbar ist.
Danke
Explain() hinzufügen
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 50424,
"executionTimeMillis" : 510228,
"totalKeysExamined" : 83546,
"totalDocsExamined" : 167092,
"executionStages" : {
"stage" : "FETCH",
"filter" : {
"$and" : [
{
"age" : {
"$eq" : "5"
}
},
{
"city" : {
"$eq" : "beijing"
}
}
]
},
"nReturned" : 50424,
"executionTimeMillisEstimate" : 509543,
"works" : 167095,
"advanced" : 50424,
"needTime" : 116670,
"needYield" : 0,
"saveState" : 24418,
"restoreState" : 24418,
"isEOF" : 1,
"invalidates" : 0,
"docsExamined" : 83546,
"alreadyHasObj" : 83546,
"inputStage" : {
"stage" : "TEXT",
"nReturned" : 83546,
"executionTimeMillisEstimate" : 509362,
"works" : 167095,
"advanced" : 83546,
"needTime" : 83548,
"needYield" : 0,
"saveState" : 24418,
"restoreState" : 24418,
"isEOF" : 1,
"invalidates" : 0,
"indexPrefix" : {
},
"indexName" : "banner_text",
"parsedTextQuery" : {
"terms" : [
"ii"
],
"negatedTerms" : [ ],
"phrases" : [ ],
"negatedPhrases" : [ ]
},
"textIndexVersion" : 3,
"inputStage" : {
"stage" : "TEXT_MATCH",
"nReturned" : 83546,
"executionTimeMillisEstimate" : 509320,
"works" : 167095,
"advanced" : 83546,
"needTime" : 83548,
"needYield" : 0,
"saveState" : 24418,
"restoreState" : 24418,
"isEOF" : 1,
"invalidates" : 0,
"docsRejected" : 0,
"inputStage" : {
"stage" : "TEXT_OR",
"nReturned" : 83546,
"executionTimeMillisEstimate" : 509310,
"works" : 167095,
"advanced" : 83546,
"needTime" : 83548,
"needYield" : 0,
"saveState" : 24418,
"restoreState" : 24418,
"isEOF" : 1,
"invalidates" : 0,
"docsExamined" : 83546,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 83546,
"executionTimeMillisEstimate" : 1642,
"works" : 83547,
"advanced" : 83546,
"needTime" : 0,
"needYield" : 0,
"saveState" : 24418,
"restoreState" : 24418,
"isEOF" : 1,
"invalidates" : 0,
"keyPattern" : {
"_fts" : "text",
"_ftsx" : 1
},
"indexName" : "name_text",
"isMultiKey" : true,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "backward",
"indexBounds" : {
},
"keysExamined" : 83546,
"seeks" : 1,
"dupsTested" : 83546,
"dupsDropped" : 0,
"seenInvalidated" : 0
}
}
试着回答一下:
1、首先想看看你的复合索引是具体怎么建立的?
2、执行的结果是按照选择的执行计划执行的;如果性能不满意,可以使用hint来指定您所创建的复合索引。
Love MongoDB! Have fun!
2017MongoDB中文社区北京用户组大会在即,2017年6月3日 13:00-18:00
众多精彩分享!值得参与!