Rumah >pembangunan bahagian belakang >Golang >Cara membuat indeks teks untuk medan bersarang dengan nama yang sama

Cara membuat indeks teks untuk medan bersarang dengan nama yang sama

WBOY
WBOYke hadapan
2024-02-09 21:00:101107semak imbas

Cara membuat indeks teks untuk medan bersarang dengan nama yang sama

editor php Strawberry akan memperkenalkan kepada anda cara membuat indeks teks dalam medan bersarang dengan nama yang sama. Dalam pangkalan data, kita sering menghadapi situasi di mana kita perlu mencari dan membuat pertanyaan dalam medan bersarang. Walau bagaimanapun, mencipta indeks teks menjadi rumit apabila terdapat berbilang medan bersarang dengan nama yang sama. Artikel ini akan menerangkan secara terperinci cara menangani masalah ini dan memberi anda penyelesaian. Seterusnya, kami akan membimbing anda melalui proses langkah demi langkah untuk membuat indeks teks dengan mudah untuk medan bersarang dengan nama yang sama.

Kandungan soalan

Saya cuba mencipta indeks teks gabungan pada 2 medan bersarang dengan nama yang sama. Sebab saya cuba melakukan ini adalah supaya saya boleh melakukan carian teks penuh menggunakan mongo pada kedua-dua medan.

Contoh struktur data

{
    "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"
    }
}

Seperti yang anda lihat daripada contoh, questionanswer 具有相同的嵌套字段 statement. Saya cuba mencipta indeks teks untuk pernyataan soalan dan jawapan

Apa yang saya cuba lakukan

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

Ini tidak berfungsi dan menghasilkan ralat ini:

Failed to create index for flashcard collection:....caused by :: 
The field 'text' appears multiple times in the index key pattern
  • Adakah cara untuk melakukan ini?
  • Adakah pendekatan saya betul untuk apa yang saya ingin capai?

p.s: Jika anda baru pergi, anda juga boleh memuat naiknya seperti di mongodb kerana pemetaan kepada pemandu mongodb go adalah sangat mudah

Penyelesaian

Sila ambil perhatian bahawa koleksi boleh mempunyai paling banyak satu teks indeks .

Jika anda tahu ini dan ingin mencipta indeks teks yang meliputi "question.statement""answer.statement" maka ini berfungsi.

Ralat anda ialah spesifikasi indeks: bson .d 表示一个文档,一个有序的属性列表(名称-值对)。这是 bson.e 的一部分,其中 bson. e ialah:

type e struct {
    key   string
    value interface{}
}

key 是属性的名称,value ialah nilai atribut ini. Jadi anda terbalikkan dan ia sepatutnya:

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

Atas ialah kandungan terperinci Cara membuat indeks teks untuk medan bersarang dengan nama yang sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam