我尝试在两个同名的嵌套字段上创建一个复合文本索引,这样做的原因是我可以使用mongo在两个字段上执行全文搜索。
数据结构示例
{
"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"
}
}
从示例中可以看到,question
和answer
具有相同的嵌套字段statement
。* 我尝试在问题和答案语句上都建立文本索引 *
我想做的事
textSearchIndexModel := mongo.IndexModel{
Keys: bson.D{
{Value: "question.statement", Key: "text"},
{Value: "answer.statement", Key: "text"},
},
Options: options.Index().SetName("textSearchIndex"),
}
这不起作用并产生此错误:
Failed to create index for flashcard collection:....caused by ::
The field 'text' appears multiple times in the index key pattern
- 有什么办法吗?
- 我的方法对于我想要实现的目标来说是正确的吗?
附言:如果你不熟悉go,你也可以上传它在mongodb上的样子,因为到mongodb go驱动程序的Map是相当直接的
1条答案
按热度按时间pkmbmrz71#
注意,一个集合最多只能有一个text index。
如果您知道这一点,并且希望创建一个同时覆盖
"question.statement"
和"answer.statement"
的文本索引,那么这是可行的。您的错误在于索引规范:
bson.D
表示一个文档,一个有序的属性列表(名称-值对),它是bson.E
的一个切片,其中bson.E
为:Key
是属性的名称,Value
是该属性的值,所以你把它倒过来,它应该是: