用时间戳排序的Mongodb全文搜索?

时间:2018-11-02 21:37:49

标签: node.js database mongodb full-text-search

我从字面上研究了整个网络,但找不到令人满意的答案,所以我想在这里问。

基本上,我想做的是建立带有分页的全文搜索查询,该查询返回按时间排序的结果。

问题是,像下面这样的幼稚排序根本无法执行:

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模式时,我没有这个问题,我认为这是针对全文搜索的。

我正在寻找一种以某种方式使此查询更快的方法。

0 个答案:

没有答案