听起来像是你需要创建的所有文本字段第一$text
指数,因为它执行与索引字段的内容的文本搜索文本索引:
db.sw_api.createIndex({
"value_chain.category" : "text",
"value_chain.hpe_level0" : "text",
"value_chain.hpe_level1" : "text",
"value_chain.hpe_level2" : "text",
"value_chain.hpe_level3" : "text"
}, { "name": "value_chain_text_idx"});
您创建的索引是由5列的一个综合指数,以及蒙戈将默认自动创建文本命名空间为你,如果你不重写。通过以上,如果不指定索引的名称为
db.sw_api.createIndex({
"value_chain.category" : "text",
"value_chain.hpe_level0" : "text",
"value_chain.hpe_level1" : "text",
"value_chain.hpe_level2" : "text",
"value_chain.hpe_level3" : "text"
});
有一个潜在的错误"ns name is too long (127 byte max)"
因为文本索引将是这样的:
"you_db_name.sw_api.$value_chain.category_text_value_chain.hpe_level0_text_value_chain.hpe_level1_text_value_chain.hpe_level2_text_value_chain.hpe_level3_text"
因此,有必要给它一个如果mongo自动生成的话名称不会太长。
一旦创建了索引,一个db.sw_api.getIndexes()
查询会告诉你的指标提出:
/* 1 */
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "dbname.sw_api"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "value_chain_text_idx",
"ns" : "dbname.sw_api",
"weights" : {
"value_chain.category" : 1,
"value_chain.hpe_level0" : 1,
"value_chain.hpe_level1" : 1,
"value_chain.hpe_level2" : 1,
"value_chain.hpe_level3" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
一旦你创建了索引,然后你可以做一个$text
搜索:
db.sw_api.find({ "$text": { "$search": "gift" } })
我在我的问题中做了一些修改 –