ElasticSearch 是一个基于Lucene的搜多服务器 。提供了分布式多用户能力的全文搜索引擎,基于restful web 接口。使用java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎
简单实用json通过http请求,对es进行索引和数据操作
零配置和一个完全免费的搜索模式,es会自动对搜索请求进行负载均衡
ES提供了两种搜索的方式:
请求参数方式
请求体方式(带body 的那种查询,把查询的内容放入body中,会造成一定的开销,但是易于理解)
下面介绍请求体方式
es = Elasticsearch(['localhost:9200'])
单一操作
增加
create 必须指定待查询的idnex、type、id和查询体body;缺一不可,否则报错
index 相比于create,index的用法就相对灵活很多;id并非是一个必选项,如果指定,则该文档的id就是指定值,若不指定,则系统会自动生成一个全局唯一的id赋给该文档。
body = {"name": 'lucy', 'sex': 'female', 'age': 10} es.index(index='indexName', doc_type='typeName', body, id=None)
删除
delete:删除指定index、type、id的文档
es.delete(index='indexName', doc_type='typeName', id='idValue')
查找
get:获取指定index、type、id所对应的文档
es.get(index='indexName', doc_type='typeName', id='idValue')
更新
update:跟新指定index、type、id所对应的文档
es.update(index='indexName', doc_type='typeName', id='idValue', body={待更新字段})
批量操作
查询
search
查询满足条件的所有文档,没有id属性,且index,type和body均可为None。 body的语法格式必须符合DSL格式
叶子查询条款
如 match,term或 range查询。这些查询可以单独使用
复合查询子句
包装其他叶子或复合查询,用于以逻辑方式(例如bool或dis_max查询)组合多个查询 ,或者用于更改其行为(例如 constant_score查询)
query = {'query': {'match_all': {}}}# 查找所有文档 query = {'query': {'term': {'name': 'jack'}}}# 查找名字叫做jack的所有文档 query = {'query': {'range': {'age': {'gt': 11}}}}# 查找年龄大于11的所有文档 allDoc = es.search(index='indexName', doc_type='typeName', body=query)
删除
delete_by_query
query = {'query': {'match': {'sex': 'famale'}}}# 删除性别为女性的所有文档 query = {'query': {'range': {'age': {'lt': 11}}}}# 删除年龄小于11的所有文档 es.delete_by_query(index='indexName', body=query, doc_type='typeName')
更新
update_by_query
query = { "script": { "lang": "painless", # "inline": "if (ctx._source.test_code == null) {ctx._source.test_code= '02'}" "inline": "ctx._source.kw_sourceType= 'trueTime'" #新增字段kw_sourceType值为trueTime } } res = es.update_by_query(index="hot_rank", doc_type="baidu_hot_search_rank", body=query)