Maison  >  Article  >  développement back-end  >  Comment créer un index de texte pour les champs imbriqués du même nom

Comment créer un index de texte pour les champs imbriqués du même nom

WBOY
WBOYavant
2024-02-09 21:00:101063parcourir

Comment créer un index de texte pour les champs imbriqués du même nom

l'éditeur php Strawberry vous présentera comment créer un index de texte dans un champ imbriqué du même nom. Dans les bases de données, nous rencontrons souvent des situations où nous devons effectuer des recherches et des requêtes dans des champs imbriqués. Cependant, la création d'un index de texte devient compliquée lorsqu'il existe plusieurs champs imbriqués portant le même nom. Cet article vous expliquera en détail comment résoudre ce problème et vous proposera une solution. Nous vous guiderons ensuite à travers le processus étape par étape pour créer facilement des index de texte pour les champs imbriqués portant le même nom.

Contenu de la question

J'essaie de créer un index de texte composé sur 2 champs imbriqués du même nom. La raison pour laquelle j'essaie de faire cela est pour pouvoir effectuer une recherche en texte intégral en utilisant mongo sur les deux champs.

Exemple de structure de données

{
    "createdat": "2023-01-20t18:39:45.551z",
    "id": "63cadff13fc409d0b026f219",
    "userid": "63c13a9ba4c921b78e7d1a3a",
    "question": {
        "statement": "what is the atomic number of potassium?",
        "fileurl": "http://localhost:4000/media/90152d8363424e688ad6e9505194a818.jpg",
        "mediatype": 2
    },
    "answer": {
        "statement": "19"
    }
}

Comme vous pouvez le voir sur l'exemple, questionanswer 具有相同的嵌套字段 statement. J'essaie de créer un index de texte pour les questions et réponses

Ce que j'ai essayé de faire

    textsearchindexmodel := mongo.indexmodel{
        keys: bson.d{
            {value: "question.statement", key: "text"},
            {value: "answer.statement", key: "text"},
        },
        options: options.index().setname("textsearchindex"),
    }

Cela ne fonctionne pas et produit cette erreur :

Failed to create index for flashcard collection:....caused by :: 
The field 'text' appears multiple times in the index key pattern
  • Y a-t-il un moyen de faire cela ?
  • Mon approche est-elle adaptée à ce que je souhaite réaliser ?

p.s : Si vous êtes nouveau, vous pouvez également le télécharger tel quel sur mongodb car le mappage avec le pilote mongodb go est très simple

Solution de contournement

Veuillez noter qu'une collection peut avoir au plus un texte indice .

Si vous le savez et souhaitez créer un index de texte qui couvre "question.statement""answer.statement" alors cela fonctionne.

Votre erreur est que la spécification de l'index : bson .d 表示一个文档,一个有序的属性列表(名称-值对)。这是 bson.e 的一部分,其中 bson. e est : 

type e struct {
    key   string
    value interface{}
}

key 是属性的名称,value est la valeur de cette propriété. Alors vous l'avez retourné et ça devrait être :

textSearchIndexModel := mongo.IndexModel{
    Keys: bson.D{
        {Key: "question.statement", Value: "text"},
        {Key: "answer.statement", Value: "text"},
    },
    Options: options.Index().SetName("textSearchIndex"),
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer