python3从ES中以分词方式查询数据并实现分页的demo

实现效果:前提是已经配置好了ES IK分词扩展的和创建好了索引并导入了数据的情况下,实现分页查询。demo代码如下:

from elasticsearch import Elasticsearch
'''
@:param page_szie:每页显示条数
@:param page_index:当前第几页
@:param where_list:查询条件,格式如:[{"article_content":"成都"},{"article_title":"北京"}]
'''
def get_data(page_szie,page_index,where_list):
    result = {}
    try:
        #连接Elasticsearch
        es = Elasticsearch([{'host':'192.168.16.11','port':9200}])
        from_index=page_szie*(page_index-1)
        #条件拼接
        should = []
        for x in where_list:
            item = {"match": {
                list(x.keys())[0]: {
                    "query": list(x.values())[0],
                    "analyzer": "ik_smart"
                }}}
            should.append(item)
        body={
            "query":{
                "bool":{
                        "must":[
                            {
                               "bool":{
                                   "should":should
                               }

                            },
                        ],
                    }
                },
                "from":from_index,   #起始位置
                "size": page_szie,  #每页条数
                "sort":{"article_time":"desc"} #排序字段和排序方式
        }
        res=es.search(index="article_all_new",body=body,doc_type="doc")
        count=res["hits"]["total"]
        result["page_szie"]=page_szie
        result["page_index"]=page_index
        result["total"]=count
        result["total_page"]=int(count/page_szie) if count%page_szie==0 else int(int(count/page_szie)+1)
        result["code"]=0
        result["list"]=res["hits"]["hits"]
        return result
    except Exception as ex:
        result["code"] = -1
        return result


lis=[{"article_content":"成都双流"},{"article_title":"北京"}]
data=get_data(5,2,lis)
print(data)

运行返回结果如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小牛牛先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值