聽起來像是你需要創建的所有文本字段第一$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" } })
我在我的問題中做了一些修改 –