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

时间:2015-03-16 08:34:04

标签: mongodb indexing mongoengine

我有一个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'])

1 个答案:

答案 0 :(得分:1)

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