Как разбить на страницы список словарей, которые поступают из запроса эластичного поиска, используя пагинацию колбы? - PullRequest
0 голосов
/ 20 октября 2019

Мне трудно использовать нумерацию страниц. Я должен разбить на страницы запросasticsearch, но когда я нажимал на вторую страницу, он показывал пустое имя, потому что он отправлял запрос Get, и снова запрос Flexiblesearch запускался и возвращал пустой список. Я решил эту проблему, сохранив данные в файл json, но снова, когда я возвращаюсь на 1-ю страницу, теперь она пуста.

Код:

'

@ app. route ('/', method = ['GET', 'POST']) def search_request ():

if(request.method == "POST" or request.args.get('page')):

    json_url = os.path.join(SITE_ROOT, "static/data", "search_result.json")

    res = ''
    if(not request.args.get('page')):
        search_term = request.form["input"]
        res = es.search(
            index="data_science_index",
            size=20,
            body={
                "min_score": 0.0,
                "query": {
                    "match" : {
                        "content": search_term
                    }
                },


                "highlight" : {  "pre_tags" : ["<strong>"]
                                ,"post_tags" : ["</strong>"] ,
                                 "fields" : { "content": {}

                                       }}

           }
        )
        res['ST'] = search_term
        with open(json_url, 'w') as fout:
            json.dump(res, fout)
    else:
        with open(json_url, 'r') as fout:
            res = json.load(fout)

    data_for_pagination = res['hits']['hits']
    page, per_page, offset = get_page_args()
    offset = offset + 1
    print(f'offset: {offset} per_page: {per_page}')
    fs_for_render = data_for_pagination[offset:offset+per_page]
    total = len(data_for_pagination)
    pagination = Pagination(page=page, per_page=per_page, offset=offset,
                       total=total, record_name='data_for_pagination', css_framework='bootstrap4')
    return render_template('search.html', res_data=fs_for_render, pagination=pagination)
return render_template('search.html')

'

...