在python中,要连接elasticsearch 必须先安装:elasticsearch
pip install elasticsearch
创建elasticsearch 连接实例
#encoding:utf-8
from elasticsearch import Elasticsearch
#创建es连接实例
es = Elasticsearch(["http://192.168.11.128:9200"])
创建es索引
#创建es索引
# es.indices.create(index="account")
向es索引中写入数据
# 向es索引中写入数据
body_value={
"id":4,
"account_number" : "000000",
"firstname" : "jcTang",
"lastname" : "Tang",
"age" : 29,
"gender" : "1",
"phone":18926968869,
"address" : "深圳市南山区xx路xx号xx房",
"email" : "jcTang1512022@163.com",
"city" : "上海",
"state" : "0"
}
es.index(index="account",doc_type="test-type",ignore=404,body=body_value)
查询es索引下的数据:match_all
query={
"query":{
"match_all":{}
}
}
value = es.search(index="account",body=query)
print(value)
查询结果:
{
'took': 1,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 5,
'relation': 'eq'
},
'max_score': 1.0,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': 1.0,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '7uxn7YEBLWmmfdpNmSuf',
'_score': 1.0,
'_source': {
'id': 2,
'account_number': '000001',
'firstname': 'lilei',
'lastname': 'lei',
'age': 25,
'gender': '0',
'phone': 15900326519,
'address': '深圳市宝安区xx路xx号xx房',
'email': 'lilei159@gmail.com',
'city': '深圳',
'state': '1'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '2',
'_score': 1.0,
'_source': {
'id': 3,
'account_number': '000002',
'firstname': 'wangfang',
'lastname': 'wang',
'age': 27,
'gender': '1',
'phone': 13156968869,
'address': '北京市昌平区xx路xx号xx房',
'email': 'wangfang@163.com',
'city': '北京',
'state': '0'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '3',
'_score': 1.0,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
}
}]
}
}
指定查询某个条件的数据
#查询指定数据
query={
"query":{
"match":{
'_id': '3'
}
}
}
value = es.search(index="account",body=query)
print(value)
查询结果
{
'took': 11,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 1,
'relation': 'eq'
},
'max_score': 1.0,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '3',
'_score': 1.0,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
}
}]
}
}
查询全部并升序排序
# 查询全部并升序排序
query={
"query":{
"match_all":{}
},
"sort":[
{"id":"asc"}
]
}
asc_value = es.search(index="account",body=query)
print(asc_value)
查询结果:
{
'took': 3,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 5,
'relation': 'eq'
},
'max_score': None,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': None,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
},
'sort': [1]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '7uxn7YEBLWmmfdpNmSuf',
'_score': None,
'_source': {
'id': 2,
'account_number': '000001',
'firstname': 'lilei',
'lastname': 'lei',
'age': 25,
'gender': '0',
'phone': 15900326519,
'address': '深圳市宝安区xx路xx号xx房',
'email': 'lilei159@gmail.com',
'city': '深圳',
'state': '1'
},
'sort': [2]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '2',
'_score': None,
'_source': {
'id': 3,
'account_number': '000002',
'firstname': 'wangfang',
'lastname': 'wang',
'age': 27,
'gender': '1',
'phone': 13156968869,
'address': '北京市昌平区xx路xx号xx房',
'email': 'wangfang@163.com',
'city': '北京',
'state': '0'
},
'sort': [3]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '3',
'_score': None,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房 ',
'email ': 'wei89548 @163.com ',
'city ': '上海 ',
'state ': '0 '
},
'sort ': [4]
}]
}
}
查询全部并降序排序
#查询全部并降序排序
query={
"query":{
"match_all":{}
},
"sort":[
{"id":"desc"}
]
}
desc_value = es.search(index="account",body=query)
print(desc_value)
查询结果:
{
'took': 19,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 5,
'relation': 'eq'
},
'max_score': None,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '3',
'_score': None,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
},
'sort': [4]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '2',
'_score': None,
'_source': {
'id': 3,
'account_number': '000002',
'firstname': 'wangfang',
'lastname': 'wang',
'age': 27,
'gender': '1',
'phone': 13156968869,
'address': '北京市昌平区xx路xx号xx房',
'email': 'wangfang@163.com',
'city': '北京',
'state': '0'
},
'sort': [3]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '7uxn7YEBLWmmfdpNmSuf',
'_score': None,
'_source': {
'id': 2,
'account_number': '000001',
'firstname': 'lilei',
'lastname': 'lei',
'age': 25,
'gender': '0',
'phone': 15900326519,
'address': '深圳市宝安区xx路xx号xx房',
'email': 'lilei159@gmail.com',
'city': '深圳',
'state': '1'
},
'sort': [2]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': None,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
},
'sort': [1]
}]
}
}
先排序再分页查询
# 先排序再分页查询
query={
"query":{
"match_all":{}
},
"sort":[
{"id":"desc"}
],
"from":1,
"size":2,
}
size_value = es.search(index="account",body=query)
print(size_value)
查询结果:from 分页开始位置,size从开始位置起返回多少条数据
{
'took': 5,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 5,
'relation': 'eq'
},
'max_score': None,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7-yL7YEBLWmmfdpN7ytZ',
'_score': None,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
},
'sort': [4]
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '2',
'_score': None,
'_source': {
'id': 3,
'account_number': '000002',
'firstname': 'wangfang',
'lastname': 'wang',
'age': 27,
'gender': '1',
'phone': 13156968869,
'address': '北京市昌平区xx路xx号xx房',
'email': 'wangfang@163.com',
'city': '北京',
'state': '0'
},
'sort': [3]
}]
}
}
短语搜索match_phrase
# 短语搜索match_phrase
query={
"query":{
"match_phrase":{
"age":29
}
}
}
match_phrase_value = es.search(index="account",body=query)
print(match_phrase_value)
查询结果:
{
'took': 4,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 3,
'relation': 'eq'
},
'max_score': 1.0,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': 1.0,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '3',
'_score': 1.0,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '7-yL7YEBLWmmfdpN7ytZ',
'_score': 1.0,
'_source': {
'id': 4,
'account_number': '000004',
'firstname': 'weiwu',
'lastname': 'wei',
'age': 29,
'gender': '1',
'phone': 18926968869,
'address': '上海市黄浦区xx路xx号xx房',
'email': 'wei89548@163.com',
'city': '上海',
'state': '0'
}
}]
}
}
多条件查找bool:must 必须满足条件,must_not 不满足条件
#多条件查找bool
query={
"query":{
"bool":{
"must":[
{"match":{"age":29}}
],
"must_not":[
{"match":{'city':"上海"}}
]
}
}
}
bool_value = es.search(index="account",body=query)
print(bool_value)
查询结果:
{
'took': 50,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 1,
'relation': 'eq'
},
'max_score': 1.0,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': 1.0,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
}
}]
}
}
过滤器filter
# 过滤器filter
# 查找年龄在27~30之间
qurey={
"query":{
"bool":{
"must":{"match_all":{}},
"filter":{
"range":{
"age":{
"gte":27,
"lte":30
}
}
}
}
}
}
filter_value = es.search(index="account",body=qurey)
print(filter_value)
查询结果:
{
'took': 1,
'timed_out': False,
'_shards': {
'total': 1,
'successful': 1,
'skipped': 0,
'failed': 0
},
'hits': {
'total': {
'value': 4,
'relation': 'eq'
},
'max_score': 1.0,
'hits': [{
'_index': 'account',
'_type': 'test-type',
'_id': '7exk7YEBLWmmfdpNGSu5',
'_score': 1.0,
'_source': {
'id': 1,
'account_number': '000000',
'firstname': 'jcTang',
'lastname': 'Tang',
'age': 29,
'gender': '0',
'phone': 15100000000,
'address': '深圳市南山区xx路xx号xx房',
'email': 'jctang2022@euron.com',
'city': '深圳',
'state': '1'
}
}, {
'_index': 'account',
'_type': 'test-type',
'_id': '2',
'_score': 1.0,
'_source': {
'id': 3,
'account_number': '000002',
'firstname': 'wangfang',
'lastname': 'wang',
'age': 27,
'gender': '1',
'phone': 13156968869,
'address': '北京市昌平区xx路xx号xx房 ',
'
'email ': 'wangfang @163.com ',
'
'city ': '北京 ',
'state ': '0 '
}
}
}
}]
}
}
根据条件删除指定数据
#根据条件删除指定数据
query={
"query":{
"match":{
'_id': '1'
}
}
}
es.delete_by_query(index="account",body=query)