笔记记录下操作
建立连接对象
from elasticsearch import Elasticsearch ,helpers
ElasticsearchUserName = *
ElasticsearchPassWord = *
class Es_opt:
def __init__(self):
self.es_user = ElasticsearchUserName
self.es_pwd = ElasticsearchPassWord
self.es = Elasticsearch(["127.0.0.1"], port=9200,
http_auth=(ElasticsearchUserName, ElasticsearchPassWord),
timeout=20,
max_retries=10,
ignore=[400, 404],
retry_on_timeout=True)
申明字段类型
# 基本信息
BASE_INFO = {
# "settings": {
# "number_of_shards": 3,
# "number_of_replicas": 1
# },
"mappings": {
"properties": {
"entName": {
"type": "text"
},
"Url": {
"type": "keyword"
},
"owner": {
"type": "keyword"
},
"regCapital": {
"type": "keyword"
},
"intregCapital": {
"type": "long"
},
"startDate": {
"type": "date",
"format": "yyyy-MM-dd"
},
}
}
}
1. 字符串类型
- text:如果一个字段是要被全文检索的,比如说博客内容、新闻内容、产品描述,那么可以使用 text。用了 text 之后,字段内容会被分析,在生成倒排索引之前,字符串会被分词器分成一个个词项。text 类型的字段不用于排序,很少用于聚合。这种字符串也被称为 analyzed 字段。
- keyword:这种类型适用于结构化的字段,例如标签、email 地址、手机号码等等,这种类型的字段可以用作过滤、排序、聚合等。这种字符串也称之为 not-analyzed 字段。
2.数字类型
类型 | 取值范围 |
---|---|
long | -2^63 到 2^63-1 |
integer | -2^31 到 2^31-1 |
short | -2^15 到 2^15-1 |
byte | -2^7 到 2^7-1 |
double | 64位的双精度IEEE754 浮点类型 |
float | 32位的双精度IEEE754 浮点类型 |
half_float | 16位的双精度IEEE754 浮点类型 |
scaled_foat | 缩放类型的浮点类型 |
-
在满足需求的情况下,优先使用范围小的字段。字段长度越短,索引和搜索的效率越高
。 -
浮点数,优先考虑使用 scaled_float。
3.日期类型
- 2020-11-11 或者 2020-11-11 11:11:11
- 一个从 1970.1.1 零点到现在的一个秒数或者毫秒数。
es 内部将时间转为 UTC,然后将时间按照 millseconds-since-the-epoch 的长整型来存储。
"createTime": { # 数据创建时间
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
"createTime":{# 数据创建时间
"type": "date",
"format": "yyyy-mm-dd HH:mm:ssllyyyy/mm/ddllepoch_millis"
}
"createTime": { # 数据创建时间
"type": "date",
}
{
"date":"2020-11-11 00:00:00"
}
{
"date":"2020-11-11T11:11:11Z"
}
{
"date":"1604672099958"
}
4.布尔类型(boolean)
JSON 中的 “true”、“false”、true、false 都可以。
5. 二进制类型(binary)
二进制接受的是 base64 编码的字符串,默认不存储,也不可搜索。
6.范围类型
- integer_range
- float_range
- long_range
- double_range
- date_range
- ip_range
"price":{
"type":"float_range"
}
指定范围的时,可以使用 gt、gte、lt、lte。
7. 复合类型
7.1 对象类型(object)| 7.2 嵌套类型(nested)
都可以参考 https://blog.youkuaiyun.com/PacosonSWJTU/article/details/127200021 当前连接内部说明的很详细.
创建索引
# index 索引名称
# body 数据结构
es.indices.create(index="***", body=BASE_INFO)
数据插入
1. 单条插入
for item in range(100):
es.index(index="***",document={"value":item})
2. 批量插入
insert_list=[]
for item in range(100):
insert_json={
"_index":"***", # 这里必须申请索引
"value": item
}
ssd = helpers.bulk(es, insert_list)
2.1 批量插入 生成器
def handle_es():
for value in range(10000):
# "_index":"***", # 这里必须申请索引
yield {"_index": "***", "_source": {"value": value}}
if __name__ == '__main__':
helpers.bulk(es, handle_es())
参考文章链接 https://www.cnblogs.com/Neeo/articles/10788573.html 需要的自行查看