Python ElasticSearch一站式教程(高级操作篇)
不懂基础的可以查看>>>>Python ElasticSearch一站式教程(基础篇)一、函数介绍es.search():按照指定规则查询index:要查询数据的索引size:查询所少条数据from_:从指定索引开始查询filter_path:添加过滤路径,显示指定字段(默认显示所有字段信息)query:要查询数据的规则query={‘match_all’:{}}:查询所有
·
不懂基础的可以查看
>>>>Python ElasticSearch一站式教程(基础篇)
一、函数介绍
- es.search():按照指定规则查询
- index:要查询数据的索引
- size:查询所少条数据
- from_:从指定索引开始查询
- filter_path:添加过滤路径,显示指定字段(默认显示所有字段信息)
- query:要查询数据的规则
- query={‘match_all’:{}}:查询所有语句
- query={‘match’:{‘name’:‘杨晨’}}:检索指定字段
- match:模糊查询(分词)
- match_phrase:模糊查询(不分词)
- term:精确单值查询
- terms:精确多值查询
- multi_match:多字段查询
- query:要查询的内容
- fields:要查询的字段
- prefix:前缀查询
- wildcard:通配符查询
- ?:代表一个字符
- *:代表0或多个字符
- 只能查询单一格式的数据,都是英文或都是汉字,两者混合不能使用
- regexp:正则查询
- bool:多条件查询
- must:与(and)
- should:或(or)
- must_not:非(no)
- exists:存在字段查询
- range:范围查询
- gt:大于
- gte:大于等于
- lt:小于
- lte:小于等于
- nested:json数据查询
- path:指定json数据的字段
- query:指定查询方式
- sort:排序查询
- asc:升序
- desc:降序
二、查询操作
一、基础查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引前10条数据
print(es.search(index='test'))
二、过滤字段查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 只显示test索引的age字段信息
print(es.search(index='test',filter_path=['hits.hits._source.age']))
三、切片查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,从序号为1的位置查询两条数据
print(es.search(index='test', from_=1, size=2))
四、模糊查询(分词)
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,age字段为20的数据
print(es.search(index='test', query={'match':{'age':20}}))
五、模糊查询(不分词)
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name字段为杨晨的数据
print(es.search(index='test', query={'match_phrase':{'name':'杨晨'}}))
六、精准单值查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,age为20的数据
print(es.search(index='test', query={'term':{'age':20}}))
# 查询test索引中,name为杨晨的数据,查询中文,要在字段后面加上.keyword
print(es.search(index='test', query={'term':{'name.keyword':'杨晨'}}))
七、精准多值查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name为杨晨或小明的数据
print(es.search(index='test', query={'terms':{'name.keyword':['杨晨','小明']}}))
八、多字段查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name和about都为小美的数据
print(es.search(index='test',query={'multi_match':{'query':'小美',"fields":['name','about']}}))
九、前缀查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name字段前缀为小的数据
print(es.search(index='test',query={'prefix':{'name.keyword':'小'}}))
十、通配符查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name字段为杨*的数据
print(es.search(index='test',query={'wildcard':{'name.keyword':'杨?'}}))
十一、正则查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name字段为杨*的数据
print(es.search(index='test',query={'regexp':{'name.keyword':'杨.'}}))
十二、多条件查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,name字段为小美,id字段为1的数据
print(es.search(index='test',query={'bool':{'must':{'term':{'name':'小美'},'term':{'id':'1'}}}}))
十三、存在字段查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,包含age字段的数据
print(es.search(index='test',query={'exists':{'field':'age'}}))
十四、范围查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,age字段大于20小于等于23的数据
print(es.search(index='test',query={'range':{'age':{'gt':20,'lte':23}}}))
十五、Json字段查询
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中,jsonfield1字段下json数据jsonfield2字段的数据包含'json'的数据
print(es.search(index='test',query={'nested':{'path':'jsonfield1','query':{'term':{'jsonfield1.jsonfield2':'json'}}}}))
十六、排序
from elasticsearch import Elasticsearch
# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象
es = Elasticsearch(hosts="localhost",port=9200,timeout=3600)
# 查询test索引中的数据,按照age字段降序
print(es.search(index='test', sort={'age.keyword':{'order':'desc'}}))
更多推荐
已为社区贡献21条内容
所有评论(0)