前言

如果没有安装安装ES可以参考这篇文章:
Elasticsearch 安装使用及其常见错误现象

ES的基本使用(postman版)

ES 和数据库可以进行类比学习。
传统数据库 | database |Rows| columns
-------- | --------- | -------| --------- | -------
ES |Index| Type |Document |fields

传统数据库只能保存简单的数据类型。而ES 可以保存更加复杂的数据类型。

{
“name”:”zs”,
“age”: 18,

}

创建index

在这里插入图片描述
在这里插入图片描述

查看所有的索引

在这里插入图片描述

查看当前索引

在这里插入图片描述

删除索引

在这里插入图片描述

创建文档

在这里插入图片描述

查询文档

在这里插入图片描述

ES基本使用(Python版)

创建car 的 属性

{
    "mappings":{
       "car":{
           "properties":{
               "c_name":{
                   "type":"keyword"
               },
               "c_date":{
                   "type":"date",
                   "format":"yyyy-MM-dd"
               },
               "c_mileage":{
                   "type":"float"
               },
               "c_city":{
                   "type":"text"
               },
               "c_price":{
                   "type":"float"
               },
               "c_sale":{
                   "type":"text"
               },
               "c_service":{
                  "type":"text" 
               }
           }
       } 
    }
}

在这里插入图片描述

安装连接es的模块

pip install elasticsearch

使用python脚本插入10000 条数据

import random
from elasticsearch import Elasticsearch

es = Elasticsearch("自己ES的ip号", timeout=360)  # 链接服务器,设置超时时间

# 尝试保存10000条数据

c_names = """奥迪
宾利
宝马
华晨
比亚迪
别克
凯迪知拉克
雪佛兰
克莱斯道勒
一汽
法拉利
菲亚特
福特
本田
捍马回
现代
捷豹
吉普
起亚
兰博基尼
路虎
雷克撒斯
林肯
莲花
玛莎拉蒂
迈巴赫
马自达
奔驰答
迷你
三菱
日产
欧宝
标志
保时捷
雷诺
劳斯莱斯
萨博
斯科达
世爵
斯巴鲁
铃木
丰田
大众""".split("\n")

c_citys = "郑州市、洛阳市、焦作市、商丘市、信阳市、周口市、鹤壁市、安阳市、濮阳市、驻马店市、\
南阳市、开封市、漯河市、许昌市、新乡市、济源市、灵宝市、偃师市、邓州市、登封市、三门峡市、\
新郑市、禹州市、巩义市、永城市、长葛市、义马市、林州市、项城市、汝州市、荥阳市、\
平顶山市、卫辉市、辉县市、舞钢市、新密市、孟州市、沁阳市、郏县".split("、")

for i in range(10000):
    data = {
        "c_name": random.choice(c_names),
        "c_date": "%s-%s-%s" % (
            random.randint(1983, 2020),
            random.randint(1, 12),
            random.randint(1, 28)
        ),
        "c_mileage": random.randint(1, 10000),
        "c_city": random.choice(c_citys),
        "c_price": random.randint(8, 100),
        "c_sale": random.randint(1, 3),
        "c_service": random.randint(30, 100)
    }  # 构建插入数据的结构

    res = es.index(index="carlist", doc_type="car", body=data)  # 开始执行
    # print(res)

print('插入完成了....')

基本查询

from elasticsearch import Elasticsearch

es = Elasticsearch(hosts='自己的ESip', timeout=360)

body = {
    # 1. 精确查询
    # "query": {
    #     "term": {
    #         "c_name": '宝马'
    #     }
    # }
    # 2.多条件查询
    # "query": {
    #     "terms": {
    #         "c_name": ['宝马', '丰田']  # 查询宝马和丰田
    #     }
    # }
    # 3.查询所有
    # "query": {
    #     "match_all": {}
    # }

    # 4.分页
    # "query": {
    #     "match_all": {}
    # },
    # 'from': 0,
    # 'size': 100

    # 5. 排序
    # "query": {
    #     "match_all": {}
    # },
    # 'sort': ['c_date','c_price']  # 升序
    # 'sort': {
    #     "c_date": {
    #         "order": 'desc'  # 降序
    #     }
    # }
    # 6. 模糊查询  es  --->> 分词
    # "query": {
    #     "match": {
    #         'c_name': '宝马'
    #     }
    # }

    # 7. 逻辑
    # must
    # "query": {
    #     "bool": {
    #         "must": [
    #             {
    #                 'term': {
    #                     'c_name': '宝马'
    #                 }
    #             },
    #             {
    #                 'term': {
    #                     'c_price': 18
    #                 }
    #             }
    #         ]
    #     }
    # }

    # should  表示 或者
    # "query": {
    #     "bool": {
    #         "should": [
    #             {
    #                 'term': {
    #                     'c_name': '奔驰'
    #                 }
    #             },
    #             {
    #                 'term': {
    #                     'c_price': 80
    #                 }
    #             }
    #         ]
    #     }
    # }

    # must_not 非
    # "query": {
    #     "bool": {
    #         "must_not": [
    #             {
    #                 'term': {
    #                     'c_name': '宝马'
    #                 }
    #             },
    #             {
    #                 'term': {
    #                     'c_price': 80
    #                 }
    #             }
    #         ]
    #     }
    # }

    # 8.查询范围 range
    # 'query': {
    #     'range': {
    #         'c_price': {
    #             'gt': 20, # 大于
    #             'lt': 30 # 小于
    #         }
    #     }
    # }

    # 9. 聚合
    # 'query': {
    #     'term': {
    #         'c_name': '宝马'
    #     }
    # },
    # 'aggs': {
    #     'price_avg': {
    #         'avg': {
    #             'field': 'c_price'
    #         }
    #     }
    # }
    # 10. 分组
    'query': {
        'match_all': {}
    },
    'aggs': {
        'car_sum': {
            'terms': {
                'field': 'c_name'
            }
        }
    }
}
# select * from car where c_name='宝马'
result = es.search(index='carlist', doc_type='car', body=body)
print(result)
# car_list = result['hits']['hits']
# for car in car_list:
#     print(car['_source'])



  • 关注微信公众号【爱上开源】,该公众号会为你提供作者在网上找到有趣的开源项目,会将使用过程写成文章呈现给读者.公众号还提供爬虫和部分计算机资源给读者.如果读者想要什么资源可以私信给我,作者会尽力查询(不要涉嫌违法资源即可)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐