2015-08-16 77 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',但是你仍然需要锚点或者整个索引被扫描。当然,你总是可以将内容分成小写的数组中的独特的单词标记,然后案例的敏捷性不是问题。 –