Моя цель - запросить несколько полей в 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)
И это прекрасно работает, но это:
- Не запрашивает несколько полей(очевидно, поскольку я указываю только имя)
- Не возвращает взвешенную текстовую оценку
Как выполнить частичный текстовый поиск (например: " la"in" b la h ") на нескольких полях с набранными весами в MongoEngine?
РЕДАКТИРОВАТЬ: похоже, мой подход является открытой проблемой: https://github.com/MongoEngine/mongoengine/issues/1808