Удалить элементы из результатов поиска на основе того, содержит ли атрибут текст - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть запрос, который получает все документы из коллекции, называемой «намерениями», затем запускает поиск и получает статистику по каждому из этих намерений из другой коллекции.

Что мне нужно сделать, это удалить некоторые из этих намерений перед поиском. Критерий состоит в том, содержит ли их столбец «имя» строки, которые есть в списке.

Некоторые из этих строк состоят из нескольких слов, и они также должны игнорировать регистр. (т. е. если список содержит «Продукт», все его варианты должны быть удалены из результата запроса «Продукт», «Продукт», «Продукт» и т. д.)

Кто-нибудь знает, как мне этого добиться? Похоже, текстовый поиск - это путь, но я не верю, что могу использовать «не включая текст».

Это то, что у меня есть, он отлично работает, за исключением фильтрации элементов из списка:

cursor = self.db.intents.aggregate([
            {
                '$match': {
                    'activity_provider_id': self.activity_provider_id,
                }
            },
            {
                '$lookup': {
                    'from': 'messages',
                    'let': {'name': '$name'},
                    'pipeline': [
                        {
                            '$match': {
                                '$expr': {
                                    '$eq': ['$triggered_intent.id', '$$name']
                                }
                            },
                        },
                        {
                            '$match': {
                                '$expr': {
                                    '$gte': ['$at', timestamp_from]
                                }
                            }
                        },
                        {
                            '$match': {
                                '$expr': {
                                    '$lte': ['$at', timestamp_to],
                                }
                            }
                        },
                    ],
                    'as': 'messages_with_intent'
                }
            },
            {
                '$replaceRoot': {
                    'newRoot': {
                        'name': '$name',
                        'display_name': '$display_name',
                        'occurrences': { '$size': '$messages_with_intent' }
                    }
                }
            },
            {
                '$sort': {
                    'occurrences': -1
                }
            },
            {
                '$limit': 10
            }
        ])
...