Heroku SearchBox Elasticsearch выдает ошибку типа - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над реализацией поиска с использованием Flask и Elasticsearch. Все работает локально, приложение работает на Heroku, новые элементы индексируются Heroku Elasticsearch (проверяется с помощью панели управления), но получение результатов не работает на Heroku (но работает с точно таким же кодом локально с тем же набором данных).

Ошибка в журналах Heroku:

File "/app/app/main/routes.py", line 173, in search
if total > page * current_app.config['POSTS_PER_PAGE'] else None
TypeError: '>' not supported between instances of 'dict' and 'int'

Код в маршрутизации вокруг этой строки:

@bp.route('/search')
@login_required
def search():
    if not g.search_form.validate():
        return redirect(url_for('main.index'))
    page = request.args.get('page', 1, type=int)
    companies, total = Company.search(g.search_form.q.data, page,
                               current_app.config['POSTS_PER_PAGE'])
    next_url = url_for('main.search', q=g.search_form.q.data, page=page + 1) \
        if total > page * current_app.config['POSTS_PER_PAGE'] else None
    prev_url = url_for('main.search', q=g.search_form.q.data, page=page - 1) \
        if page > 1 else None
    return render_template('search.html', title='Search', companies=companies,
                           next_url=next_url, prev_url=prev_url)

И код в search.py, который доставляет результаты:

def query_index(index, query, page, per_page):
    if not current_app.elasticsearch:
        return [], 0
    search = current_app.elasticsearch.search(
        index=index, doc_type=index,
        body={'query': {'multi_match': {'query': query, 'fields': ['*']}},
              'from': (page - 1) * per_page, 'size': per_page})
    ids = [int(hit['_id']) for hit in search['hits']['hits']]
    return ids, search['hits']['total']

Сложность в том, что она работает локально, но не в Heroku, я не уверен, почему эта ошибка будет специфичной для Heroku, поскольку при тестировании это тот же набор данных и поисковый запрос.

Если я использую панель инструментов Searchly (Heroku Elasticsearch) для репликации поиска, я получаю ожидаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...