我可以在同一個字段上有多種類型的索引嗎?它會影響性能嗎?MongoDB同一字段的多種索引
例子:
db.users.createIndex({"username":"text"})
db.users.createIndex({"username":1})
我可以在同一個字段上有多種類型的索引嗎?它會影響性能嗎?MongoDB同一字段的多種索引
例子:
db.users.createIndex({"username":"text"})
db.users.createIndex({"username":1})
是的,你可以有不同類型的單場索引。您可以創建類型索引例如text,2dsphere,hash
您不能使用稀疏和唯一選項創建相同的索引。
每一個寫操作會在這種情況下
更新所有可能的類型的相關索引條目這兩個指數期權有很大的不同。
當您在字符串字段上創建常規索引時,它會索引字符串中的整個值。對於單個字符串(如用戶名登錄),您可以完全匹配。
其他硬件上的文本索引將標記並干擾該字段的內容。因此,它會將字符串分解爲單個單詞或標記,並將進一步將它們縮減爲其詞,使得相同單詞的變體將匹配(例如,「談話」匹配「談話」,「談話」和「談話」爲「談話「是所有三個詞幹)。對真正的文本(句子,段落等)非常有用。 文本搜索
文本搜索支持搜索集合文檔中的字符串內容。 MongoDB提供$ text操作符來在查詢和聚集管道中執行文本搜索。
文本搜索過程:
標記化和莖索引創建和文本命令執行期間都搜索項(多個)。 爲索引字段中包含搜索詞的每個文檔分配一個分數。得分確定 文檔與給定搜索查詢的相關性。
$ text操作符可以搜索單詞和短語。查詢匹配完整的詞幹。例如,如果文檔字段包含單詞blueberry,則對術語「藍色」的搜索將與該文檔不匹配。然而,搜索藍莓或藍莓將匹配。 $正則表達式搜索可以與字符串字段上的常規索引一起使用,以提供一些模式匹配和通配符搜索。不是索引的非常有效的用戶,但它會使用下列索引: 如果該字段存在索引,則MongoDB將正則表達式與索引中的值進行匹配,這可能比集合掃描更快。如果正則表達式是「前綴表達式」,則可能會發生進一步優化,這意味着所有可能的匹配都以相同的字符串開頭。這允許MongoDB根據該前綴構造一個「範圍」,並僅與來自該範圍內索引的那些值匹配。
http://docs.mongodb.org/manual/core/index-text/
http://docs.mongodb.org/manual/reference/operator/query/regex/