elasticsearch 调研


Author: yifei / Created: June 22, 2018, 4 p.m. / Modified: June 22, 2018, 4:03 p.m. / Edit

ES 最新版本到底是怎样的?

ES家的几个产品版本不太统一,有的在2.x,有的在4.x,为了打包在一起卖,ES家把ES、kibana、beats的版本统一成了 5.0 版本。

ElasticSearch 集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

在Elasticsearch中,每一个字段的数据都是默认被索引的。也就是说,每个字段专门有一个反向索引用于快速检索。而且,与其它数据库不同,它可以在同一个查询中利用所有的这些反向索引,以惊人的速度返回结果。

一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:

节点  说明  
_index  文档存储的地方 类似于数据库
_type   文档代表的对象的类   类似于表
_id 文档的唯一标识 类似于id
_version    用于控制冲突  可以由外部指定,采用乐观锁

检索返回_source,可以使用_update API局部更新文档,_mget总会返回200

搜索

GET /_search 返回

返回

   {
   "hits" : {
      "total" :       14,
      "hits" : [
        {
          "_index":   "us",
          "_type":    "tweet",
          "_id":      "7",
          "_score":   1,
          "_source": {
             "date":    "2014-09-17",
             "name":    "John Smith",
             "tweet":   "The Query DSL is really powerful and flexible",
             "user_id": 2
          }
       },
        ... 9 RESULTS REMOVED ...
      ],
      "max_score" :   1
   },

Python 客户端

ingore

An API call is considered successful (and will return a response) if elasticsearch returns a 2XX response. otheriwse an TransportError is raised. use ignore to ignore errors

es.indices.create(index='test-index', ignore=400) es.indices.delete(index='test-index', ignore=[400, 404])

response filtering

filter_path parameter to filter response, typically es returns response['hits']['hits'], which is quite cumbersome.

es.search(index='test-index', filter_path=['hits.hits._id', 'hits.hits._type']) # returns the _id and _type es.search(index='test-index', fitler_path=['hits.hits._*']) # returns all fileds in hits

bulk and helpers

for bulk request

Methods

common pattern

es.method(index='', doc_type='', id='', zbody='', _source=True/False...)

count query must be ecasulterd in query create add document to es
delete delete document by id
delete_by_query
exists exists by id
get get by id
index
mget by body search by body update
helpers.bulk

Exceptions

TransportError 4XX NotFound 404 Conflict 409 BadRequest 400

参考:

  1. http://www.tianshangkun.com/2018/05/15/ElasticSearch%E7%9A%84%E6%90%AD%E5%BB%BA%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%9F%E8%AE%A1/

有任何问题可以发邮件到 kongyifei (at) gmail.com 讨论