mongo和排序操作中的文本索引

时间:2017-03-23 18:39:14

标签: mongodb sorting indexing

阅读以下https://docs.mongodb.com/manual/core/index-text/#restrictions中可以阅读的mongo文档:

  

"排序操作无法从文本索引获取排序顺序,即使是复合文本索引也是如此;即排序操作不能使用文本索引中的排序。"

考虑到这一点,我将使用mongo客户端进行一些测试。

首先,我将创建一个文本索引:

db.collection.createIndex( { "product.title": "text" } )

然后我将尝试使用索引文本查找一些数据并在结果中应用某种排序:

db.collection.find( { $text: { $search: "SAR" } } ,{"product.title":1}).sort({"product.title":1})

该查询返回以下内容:

{"product" : { "title" : "SAR 1" } } {"product" : { "title" : "SAR 2" } } {"product" : { "title" : "SAR 3" } }

然后当我更改订单排序时:

db.collection.find( { $text: { $search: "SAR" } } ,{"product.title":1}).sort({"product.title":-1})

结果改变:

{ "product" : { "title" : "SAR 3" } } { "product" : { "title" : "SAR 2" } } { "product" : { "title" : "SAR 1" } }

所以,我可以使用文本索引并使用排序(文档说你不能)

文本索引和排序限制的目标是什么?我确定我不理解这个限制

1 个答案:

答案 0 :(得分:1)

如果您通过MongoDB explainer运行该查询,它会告诉您确定发生了什么;但我猜是这样的:

  • 您的查询正在使用文字索引,没问题。这只是找回哪些文件的位
  • 但是当涉及排序这些文档时,数据库服务器必须在没有任何索引的帮助下执行

在您的示例中,查询返回的文档数量非常少,排序时间不会很长。但是一个不同的查询,也许是一个聚合,它有一个必须对数千个文档进行排序的阶段,因为没有辅助排序,所以会很慢。