2015-08-16 71 views
0

我有一個像MongoDB的潛臺詞搜索

{ 
    City : "CityName11", 
    State : "StateName1" 
}, 
{ 
    City : "CityName2", 
    State : "StateName2" 
},{ 
    City : "CityName3", 
    State : "StateName3" 
} 

集合現在在市場我有文本索引,我想用"ci"搜索,它應該返回包含該短語的所有結果。我試過$search: "\"Ci\"",似乎它不起作用。任何幫助將不勝感激。

回答

1

文本索引不能很好地工作(基本上它們根本不工作),而實際上並不是「完整的文字」。

比如你鍵入檢索算法,你需要使用一個$regex代替:

db.collection.find({ "City": { "$regex": "ci", "$options": "i" } }) 

而且prefereably錨定在字符串的開頭,並沒有「不區分大小寫」選項,該選項允許使用索引(一個普通的索引):

db.collection.find({ "City": { "$regex": "^Ci" } }) 
+0

Thanks @ blakes-seven!你的答案是有道理的,但我需要一個自動完成功能的查詢,所以我不能把「不區分大小寫」選項,因爲它是一個預定義的地址集合,有沒有更好的搜索方式? –

+1

@AnkitSarkar沒有更好的方法來做到這一點。文本搜索只能使用合理認可的單詞,因此短小的內容不會與任何內容匹配。即使同樣被錨定,仍然需要掃描整個索引。你總是可以做一些事情,比如'^ ci | Ci | CI | cI',但是你仍然需要錨點或者整個索引被掃描。當然,你總是可以將內容分成小寫的數組中的獨特的單詞標記,然後案例的敏捷性不是問題。 –