Частичное совпадение текста с взвешенным текстовым поиском mongoengine? - PullRequest
0 голосов
/ 11 февраля 2019

Моя цель - запросить несколько полей в MongoDB с помощью частичного текстового поиска и вывести результаты / w взвешенных баллов совпадений.

Допустим, у меня есть такая модель:

class Substance(db.Document):
    name = db.StringField(required=True)
    aka = db.ListField()

    meta = {
        "indexes": [{
            "fields": ["$name", "$aka"],
            "default_language": "english",
            "weights": {
                "name": 10,
                "aka": 8
            }
        }]
    }

Я пытаюсь выполнить обычный поиск, например:

Substance.objects.search_text('blah').order_by('$text_score')

Но это не включает частичные совпадения текста.

Поэтому я решил попробовать частичное сопоставление текста с регулярным выражением через:

query = 'blah'
regex = re.compile('.*{}.*'.format(query), re.IGNORECASE)
substance_results = Substance.objects(name=regex)

И это прекрасно работает, но это:

  1. Не запрашивает несколько полей(очевидно, поскольку я указываю только имя)
  2. Не возвращает взвешенную текстовую оценку

Как выполнить частичный текстовый поиск (например: " la"in" b la h ") на нескольких полях с набранными весами в MongoEngine?

РЕДАКТИРОВАТЬ: похоже, мой подход является открытой проблемой: https://github.com/MongoEngine/mongoengine/issues/1808

...