我正在尝试对集合进行全文搜索,但是为此,我需要创建一个文本索引。 如何在两个字段上创建文本索引?
我知道我必须使用这样的东西:
opts := options.CreateIndexes().SetMaxTime(10 * time.Second)
idxFiles := []mongo.IndexModel{
{
Keys: bsonx.Doc{{"name": "text"}},
},
}
db.Collection("mycollection").Indexes().CreateMany(context, idx, opts)
答案 0 :(得分:0)
要使用正式的mongo go驱动程序创建索引,可以使用以下代码:
// create Index
indexName, err := c.Indexes().CreateOne(
context.Background(),
mongo.IndexModel{
Keys: bson.M{
"time": 1,
},
Options: options.Index().SetUnique(true),
},
)
if err != nil {
log.Fatal(err)
}
fmt.Println(indexName)
您可以将其替换为所需的索引配置。
答案 1 :(得分:0)
我已经找到了解决方案:
coll := db.Collection("test")
index := []mongo.IndexModel{
{
Keys: bsonx.Doc{{Key: "name", Value: bsonx.String("text")}},
},
{
Keys: bsonx.Doc{{Key: "createdAt", Value: bsonx.Int32(-1)}},
},
}
opts := options.CreateIndexes().SetMaxTime(10 * time.Second)
_, errIndex = coll.Indexes().CreateMany(context, index, opts)
if err != nil {
panic(errIndex)
}
答案 2 :(得分:0)
在MongoDB indexes documentation
中,我编写了一个函数,用于为支持的所有MongoDB类型创建索引。
func AddIndex(dbName string, collection string, indexKeys interface{}) error {
db := getNewDbClient() // get clients of mongodb connection
serviceCollection := db.Database(dbName).Collection(collection)
indexName, err := serviceCollection.Indexes().CreateOne(mtest.Background, mongo.IndexModel{
Keys: indexKeys,
})
if err != nil {
return err
}
fmt.Println(indexName)
return nil
}
mongodb单字段索引:
AddIndex("mydb", "mycollection", bson.M{"myfieldname": 1}) // to descending set it to -1
mongodb复合索引:
AddIndex("mydb", "mycollection", bson.D{{"myFirstField", 1},{"mySecondField", -1}}) // to descending set it to -1
mongodb文本索引
AddIndex("mydb", "mycollection", bson.D{{"myFirstTextField", "text"},{"mySecondTextField", "text"}})
答案 3 :(得分:0)
使用地理空间(2dsphere)、文本和单个字段。
models := []mongo.IndexModel{
{
Keys: bsonx.Doc{{Key: "username", Value: bsonx.String("text")}},
},
{
Keys: bsonx.Doc{{Key: "NearCoordinates", Value: bsonx.String("2dsphere")}},
},
{
Keys: bsonx.Doc{{Key: "password", Value: bsonx.Int32(1)}},
},
}
opts := options.CreateIndexes().SetMaxTime(20 * time.Second)
_, err := collectionName.Indexes().CreateMany(context.Background(), models, opts)
答案 4 :(得分:0)
您可以简单地创建具有自定义选项和权重的文本索引,如下所示:
mod := mongo.IndexModel{
Keys: bson.D{
{"title", "text"},
{"description", "text"},
},
// create UniqueIndex option
Options: options.Index().SetWeights(bson.D{
{"title", 9},
{"description", 3},
}),
}
collection.Indexes().CreateOne(context.Background(), mod)