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
Lepaskan: 2024-02-09 21:00:10
ke hadapan
1107 orang telah melayarinya

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"
    }
}
Salin selepas log masuk

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"),
    }
Salin selepas log masuk

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
Salin selepas log masuk
  • 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{}
}
Salin selepas log masuk

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"),
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan