我从字面上研究了整个网络,但找不到令人满意的答案,所以我想在这里问。
基本上,我想做的是建立带有分页的全文搜索查询,该查询返回按时间排序的结果。
问题是,像下面这样的幼稚排序根本无法执行:
db.collection
.find({ $text: { $search: "hello" } })
.sort({ created_at: -1 })
.limit(100)
.toArray(function(....
是的,我当然已经用created_at
对其进行了索引。正如您所看到的,它仅限于100个项目。
到目前为止,我收集的是MongoDB中的全文本索引不允许您按集合AT ALL中的任何任意属性进行排序,唯一的排序方法是在其中添加一些$meta
属性根据某种内部评分机制对其进行排序。
但这对我不起作用,我真的想按created_at
进行排序。
也许我对整个事情都产生了误解,但是我拒绝相信没有人针对这一非常明显的用例提出解决方案。我想念什么吗?有谁知道如何通过collection属性对大型文本搜索结果进行排序?在这一点上,我将不胜感激,即使是骇客。
[EDIT]例如,如果没有限制和排序,响应将如下所示:
[{
"msg": "hello world",
"created_at": 1000
}, {
"msg": "hello",
"created_at": 899
}, {
"msg": "hello hello",
"created_at": 1003
}, {
...
}]
但是在数据库中搜索“ hello”出现之后,我想将其限制为按created_at
排序的最大值为100。我不在乎相关性,我只想排序以便按时间排序。
[{
"msg": "hello hello",
"created_at": 1003
}, {
"msg": "hello world",
"created_at": 1000
}, {
"msg": "hello",
"created_at": 899
}, {
...
}]
请清楚一点,查询确实可以工作,但是即使我已经用created_at
对其进行了索引,它也花费了很长时间。当我对其他查询(不是全文搜索)执行类似的find-sort-limit模式时,我没有这个问题,我认为这是针对全文搜索的。
我正在寻找一种以某种方式使此查询更快的方法。