我目前正在研究一个需要在1000ms以下搜索(在本地机器上)大型数据库(+25.000.000条记录)的项目。这让我想到了MongoDB,并且可以达到期望的性能。我可以通过几种不同的索引做到这一点,但我需要能够部分匹配。MONGODB全文检索逻辑或查询
允许最终用户在几个字段上进行搜索。 (并非所有字段;需要能够搜索字段的5/9的其余部分是元数据不为终端用户搜索)
我第一次尝试创建复合指数(上的所有5个字段)全文搜索
db.tracks.find({$text:{$search:"Greatest Hits"}})
这似乎是工作得相当好,并给了我各种结果与大,最大的和击中任何复合的字段。
但是用户应该能够选择他想要搜索的字段。 (例如:AlbumTitle,TrackTitle等)。这意味着当曲目标题被切换时,我不希望来自该列的结果。
db.tracks.find({AlbumTitle: "Greatest Hits"})
上面的查询就能够找到完全匹配和最伟大的搜索时,因此没有发现相同的结果。这使我想到像下面
db.tracks.find({AlbumTitle: {$text: {$search: "Greatest Hits"}}})
但是,这并不工作,因为那么$文本将是一个未知的运营商。
如果像上面将有可能我就能够建立我的查询动态基础上,切换字段,如
db.tracks.find({$or: [ {ToggledField1: ...}, {ToggeldField4: ...} ]})
,因此只需要的字段查询保证。这会在所有可能MongoDB数据库中,如果有什么是要实现所期望的功能提前
我可以听到一个声音告诉我[正则表达式](https://docs.mongodb.org/manual/reference/operator/query/regex/) – styvane
这不会是时间消费?由于数据库需要在少于1000毫秒内搜索? – maxhamulyak