Mongodb 如何索引,以便文本搜索和排序使用索引?

Mongodb 如何索引,以便文本搜索和排序使用索引?,mongodb,indexing,mongoengine,Mongodb,Indexing,Mongoengine,我有一个mongoengine文档,需要进行文本字段搜索,然后进行排序。我设法创建了文本索引,但是排序操作非常慢。我需要一个如何为我的查询编制完整索引的建议: class MyDoc(Document): meta = { 'collection': 'my_doc', 'index_background': True, 'indexes': [ '-sort_field', {

我有一个mongoengine文档,需要进行文本字段搜索,然后进行排序。我设法创建了文本索引,但是排序操作非常慢。我需要一个如何为我的查询编制完整索引的建议:

class MyDoc(Document):
    meta = {
        'collection': 'my_doc',
        'index_background': True,
        'indexes': [
            '-sort_field',
            {
                'fields': ['$text_field'],
                'default_language': 'portuguese',
            }
        ],
    }
    text_field = StringField()
    sort_field = DateTimeField()

MyDoc.objects.search_text('some text').sort(['-sort_field'])

不能将文本索引与其他索引一起用于排序。您可以使用类似于
{“field”:1,“t”:“text”}
的复合索引,并在
字段
和文本搜索上使用该索引进行相等匹配,但其他情况下,文本索引不作为复合索引的一部分工作。为什么要进行文本搜索,然后在另一个字段上排序?这是一个稍微不寻常的用例。返回少量文档应该没问题,比如返回一页按日期排序的匹配结果。

实际上,我需要找到符合特定条件的文档,而不是先显示“看起来更有趣”的文档。这就是为什么我需要搜索然后排序。没什么不寻常的。任何网店都需要这样的东西。现在还买不起更大的解决方案(例如solr)。MongoDB(从3.0开始)不支持您想要的文本搜索+排序-您需要一个真正的全文搜索引擎来正确执行此操作。@wdberkeley“返回少量文档应该没问题,比如返回一页按日期排序的匹配结果。”…不是真的。按日期排序时,如果有足够的数据,MongoDB文本搜索将失败,执行器错误:溢出排序阶段缓冲数据使用量33637723字节超过33554432字节的内部限制。