irpas技术客

Python ElasticSearch一站式教程(高级操作篇)_飞Link

网络 6490

不懂基础的可以查看>>>>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'}}))


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Python