Я воссоздал вашу установку.
>>> Post.query.whoosh_search('fourth not').all()
>>> [<Post u'not my fourth'>, <Post u'my fourth and last post'>]
Вопрос, который вы должны были задать: Почему whoosh_search не может найти? Попробуй это.
>>> Post.query.whoosh_search('not').all()
>>> []
Это должно было вернуть пост «не мой четвертый», верно?
Согласно разделу «Стоп-слова» в этого документа, «стоп-слова» — это слова, настолько распространены, что индексировать их часто бывает контрпродуктивно. Этот вопрос имеет ссылку, которая показывает, что по умолчанию "не" стоп-слово, и whoosh_search его не индексирует.
Итак, давайте добавим еще один пост с «четвертым» и менее распространенным словом — как насчет «сыр».
>>> p = Post(body='cheese is the fourth food group', timestamp=datetime.datetime.utcnow(), author=u)
>>> db.session.add(p)
>>> db.session.commit()
А теперь давайте найдем все сообщения со словами «четвертый» И «сыр» в теле.
>>> Post.query.whoosh_search('fourth cheese').all()
>>> [<Post u'cheese is the fourth food group'>]
Идеальный.
БОНУС: если вы хотите, чтобы все посты содержали слова «четвертый» ИЛИ «сыр», сделайте следующее:
>>> Post.query.whoosh_search('cheese fourth', or_=True).all()
>>> [<Post u'cheese is the fourth food group'>, <Post u'not my fourth'>, <Post u'my fourth and last post'>]
person
amath
schedule
02.10.2015