在使用elasticsearch7.x的过程中,发现elasticsearch默认的副本数和分片数都为1,随着数据量不断增多,一个分片导致写入索引的效率越来越低,之后决定对业务层和数仓的索引进行重建
import logging
import traceback
import requests
from elasticsearch import Elasticsearch
from requests.auth import HTTPBasicAuth
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.INFO)
es = Elasticsearch("host1:19200,host2:19200,host3:19200".split(","),
http_auth=("username", "password"), timeout=180,
max_retries=10,
retry_on_timeout=True)
for da in list(es.indices.get_mapping("dw_gofish_*").items()):
index = da[0]
mapping = da[1]
mapping["settings"] = {
"refresh_interval": "-1",
"translog": {
"flush_threshold_size": "2gb",
"sync_interval": "120s",
"durability": "async"
"index": {
"number_of_shards": "10",
"number_of_replicas": "0"
index_nw = "{}_nw".format(index)
try:
result = es.indices.create(index_nw, mapping)
logging.info(result)
except:
logging.error(traceback.format_exc())
es.indices.put_alias([index, index_nw], name="{}_alias".format(index))
result = requests.post(
"http://ip1:19200/_reindex?refresh&wait_for_completion=false",
json={
"source": {
"index": index,
"size": 10000
"dest": {
"index": index_nw
headers={'Content-Type': 'application/json'},
auth=HTTPBasicAuth("username", "password"))
logging.info(result.text)
查看索引已存在的索引、文档数量,占用存储空间大小等信息
# pri(主分片数)、rep(副分片数)、docs.count(索引现有文档数)、docs.deleted(索引标记为删除的文档数)、store.size(索引总大小)、pri.store.size(索引主分片大小)
GET _cat/indices/index_name?v
查看索引settings设置
GET /index_name/_settings
查看reindex进度
GET _tasks?detailed=true&actions=*reindex
import requests
from requests.auth import HTTPBasicAuth
result = requests.delete(
"http://xxx.xxx.xxxx:19200/_search/scroll/_all",
headers={'Content-Type': 'application/json'},
auth=HTTPBasicAuth("username", "password"))
print(result)
在使用elasticsearch7.x的过程中,发现elasticsearch默认的副本数和分片数都为1,随着数据量不断增多,一个分片导致写入索引的效率越来越低,之后决定对业务层和数仓的索引进行重建# -*- coding: utf-8 -*-# @Time : 2019/9/21 13:48# @Author : Cocktail_pyimport loggingimport tracebackimport requestsfrom elasticsearch import .
import tornado.web
import tornado.options
from views.handly import Search, Index, SearchWipro
from mongoengine import connect
import settings
from...
1.使用Python批量提交数据
import requests
from apscheduler.schedulers.blocking import BlockingScheduler
from elasticsearch import Elasticsearch
from elasticsearch import helpers
def post_dga():
es = Elasticsearch()
平时在工作中,发现定义的字段类型不对,然后需要新建索引,将旧的数据导到新的索引上,往往会出现超时现象
{"statusCode":502,"error":"Bad Gateway","m
essage":"Client requ
est timeout"}
解决方法wait_for_completion=false
POST /_re
index?slic
es=9&refr
esh&wait_for_completion=false
"source": {
在之前的<<ElasticSearch 7.4集群部署 启用x-pack验证 Kibana7.4用户管理>>,新建一个没有superuser权限的用户之后,发现该用户没有写入索引的权限功能
一.分析异常
elasticsearch.exceptions.AuthorizationException: AuthorizationException(403, ‘security_exception’, ‘action [indices:admin/create] is unauthori
公司规定每次往es重中写入数据的时候都需要自动生成三个时间:create_time(创建时间),update_time(更新时间 默认等于创建时间),delete_time(删除时间默认为0)
一.es默认为utc时间
es默认是按UTC时间计算存储,国内的时区是+8(东八区),所以比UTC时间快8小时
二.script脚本自动生成时间以及默认值
1.定义管道(Pipeline)
# 通过管道修改默认utc时间为东八区时间,并将默认值赋值给 create_time,update_time,delete.
requests库是一个常用的用于发送HTTP请求的Python第三方库。当需要在请求中传递用户名和密码时,可以使用基本的身份验证方式。json格式是一种常用的数据交换格式,可以通过requests库来发送和接收json数据。
使用requests发送带有用户名和密码的请求,可以通过以下步骤完成:
1. 导入requests库:首先需要在Python文件中导入requests库,可以使用以下代码进行导入:
```python
import requests
2. 创建请求:使用requests库的`get()`、`post()`等方法创建HTTP请求。在请求中传递用户名和密码,可以通过`auth`参数来指定用户名和密码。示例代码如下:
```python
response = requests.get(url, auth=('username', 'password'))
3. 发送请求并获取响应:发送请求后,可以使用`response`对象来获取响应内容。示例代码如下:
```python
print(response.text)
4. 处理json数据:如果响应内容是json格式的数据,可以使用`response.json()`方法将其转换为Python字典。示例代码如下:
```python
data = response.json()
以上就是使用requests库发送含有用户名和密码的请求,并处理json格式数据的基本方法。需要注意的是,在实际使用中,密码通常需要进行加密或哈希处理,以增加安全性。另外,在处理json数据时,可能需要根据具体的数据结构来访问和处理数据。