Flask-Whooshee не возвращает результатов

Я работал над тем, чтобы объединить некоторую форму полнотекстового поиска с небольшим заданием (для развлечения). К сожалению, независимо от условия поиска, он не дает результатов, даже когда я ввожу точную информацию.

Например, когда я выполняю поиск с использованием консоли Python после импорта модели SQLAlchemy, он возвращает информацию, как и ожидалось.

>>> Contact.query.whooshee_search('sch').all()
[<Contact u'Kimberley' u'Schuppe' u'cathie.schmitt@paucek.com'>, <Contact u'Kelsey' u'Schinner' u'walsh.ardyce@yahoo.com'>, <Contact u'Rella' u'Schamberger' u'abbott.feest@gmail.com'>]

Однако при выполнении того же поиска в представлении Flask из параметра POST он возвращается ни с чем.

@app.route('/', methods=['GET', 'POST'])
@app.route('/page/<int:page>', methods=['GET'])
def index(page=1):
    if request.method == 'POST':
        query = request.form['search']
        result = Contact.query.whooshee_search(query).all()
        print query, 'result:', result
    contact = Contact.query.with_entities(Contact.lname, Contact.fname, Contact.phone, Contact.addr, Contact.email).paginate(page, app.config['PAGE_MAX'], False)
    return render_template('index.html', entry=contact)

Результат поиска 'sch' из формы:

sch result: []

Что может быть причиной этого? Я искренне озадачен, почему тот же запрос с консоли работает нормально, но через представление ничего не возвращает.

1 ответ

Это очень старое сообщение, но на тот случай, если кто-то столкнется с подобной проблемой:

Flask-Whooshee (и другие варианты flask whoosh), похоже, работают путем добавления в индекс при добавлении новых данных в базу данных, поэтому, если у вас есть существующее приложение или база данных, которая уже содержит данные, индекс будет пуст.

Индексироваться будут только данные, добавленные после создания индекса.

Если у вас есть существующее приложение/база данных, Flask-Whooshee включает в себяWhooshee.reindex()метод индексации данных. Обратите внимание, что его необходимо вызывать после регистрации любых моделей, поэтому в случае, если вы определяете модели в отдельном файле,__init__.pyфайл будет выглядеть примерно так:

      app = Flask(__name__)
whooshee = Whooshee(app)

from app import models

with app.app_context():
    whooshee.reindex()
Другие вопросы по тегам