Est-il vrai que si un index texte est utilisé, un index composite ne peut pas être utilisé ?
Parce que j'ai utilisé l'instruction de requête suivante mais que j'ai uniquement indexé du texte :
db.tests.find({$text:{$search:'zhangshan'},'age':5,'city':'beijing'}
En parcourant expliquer, il a indexé le texte. Filtrez ensuite les autres conditions de cet index !
Alors, que dois-je faire pour tous les indexer ?
J'ai pensé à créer un index de texte pour tous les champs. En raison de la grande quantité de données, je ne l'ai pas essayé. Je voudrais demander si cela est réalisable ?
Merci
Ajouter une explication()
"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
}
}
Essayez de répondre :
1. Tout d’abord, je veux voir comment votre indice composé est spécifiquement établi ?
2. Le résultat de l'exécution est exécuté selon le plan d'exécution sélectionné ; si les performances ne sont pas satisfaisantes, vous pouvez utiliser l'indice pour spécifier l'index composite que vous avez créé.
J'adore MongoDB !
La conférence du groupe d'utilisateurs de la communauté chinoise MongoDB 2017 à Pékin aura lieu bientôt, le 3 juin 2017, de 13h00 à 18h00
Beaucoup de merveilleux partages ! Ça vaut le coup de participer !