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()