Elasticsearch创建索引简单记录

很神秘,我之前没有做过Elasticsearch相关的笔记吗?这次主要是对创建索引过程做下记录,也许以后会整理一份ES相关的内容。

首先是之前并没有实际创建索引的经历,这次是第一次,基本上就是照抄模板,配置一下字段的名称和类型就完事了,有关数据同步的内容,自己并不是很清楚,因为这部分工作交给其他人做了,我做的内容主要是创建MySQL数据表在ElasticSearch中对应的索引,然后把整理的对应字段的映射表交给同步数据的人。下面列一份索引创建的json作为例子参考:

PUT wb_cpc_sbv_search_keyword_report
{
  "settings" : {
        "index.mapper.dynamic" : "true",
        "number_of_shards" : 1,
        "number_of_replicas" : 0,
        "analysis": {
            "normalizer": {
                "my_normalizer": {
                    "type": "custom",
                    "char_filter": [],
                    "filter": ["lowercase", "asciifolding"]
                }
            }
        }
    },
  "mappings": {
    "_doc": {
      "dynamic": "true",
      "properties": {
        "id": {
          "type": "integer"
        },
        "date": {
          "type": "date"
        },
        "account": {
          "type": "keyword"
        },
        "site": {
          "type": "keyword"
        },
        "type_id": {
          "type":"keyword"
        },
        "type": {
          "type":"keyword"
        },
        "_site_account_type_id_search_item": {
          "type":"keyword"
        },
        "search_item": {
          "type":"keyword"
        },
        "target_type": {
          "type":"keyword"
        },
        "match_type": {
          "type":"keyword"
        },
        "keyword_text": {
          "type":"keyword"
        },
        "group_id": {
          "type":"keyword"
        },
        "group_name": {
          "type":"keyword"
        },
        "campaign_id": {
          "type":"keyword"
        },
        "campaign_name": {
          "type":"keyword"
        },
        "impressions": {
          "type":"integer"
        },
        "clicks": {
          "type":"integer"
        },
        "cost": {
          "type":"float"
        },
        "orders": {
          "type":"integer"
        },
        "sales": {
          "type":"float"
        },
        "viewable_impressions": {
          "type":"integer"
        },
        "video_five_second_views": {
          "type":"integer"
        },
        "video_first_quartile_views": {
          "type":"integer"
        },
        "video_midpoint_views": {
          "type":"integer"
        },
        "video_third_quartile_views": {
          "type":"integer"
        },
        "video_complete_views": {
          "type":"integer"
        },
        "video_unmutes": {
          "type":"integer"
        },
        "created_at": {
          "type": "date"
        },
        "updated_at": {
          "type": "date"
        },
        "deleted_at": {
          "type": "date"
        }
      }
    }
  }
}

可以看出来创建索引的内容主要分了两部分,第一部分是设置(settings),主要是配置索引,像是分片等的配置,但是这一部分我主要是按照模板来的,并没有做更改,不太懂。第二部分是映射(mappings),主要是配置字段的名称和数据类型,目前经常用到的数据类型有keyword(用在字符串),integer(用在整数),float(用在浮点数)和date(用在日期和时间)。

工作台数据逻辑

下面主要记一下当前工作台部分的数据逻辑,首先是以MySQL每日拉数据组成的数据中心以及其他几个数据渠道,大概是以MySQL做存储数据,然后ElasticSearch在其中扮演的角色是同步要使用的数据,大概也是存储的功能,之所以不直接从数据库取数据而是要加一层ES同步数据,目前我还不太懂,不过耳濡目染听到的ES大概是在数据的汇总和搜索方面很快,比较适合工作台的使用场景。

总结

我个人是不太适应ES这套逻辑的,用json嵌套命令的坏处就是我现在都记不住查找语句咋写来着……学吧老弟,学无止境~

助益的点

term查询和match查询区别是前者不做分词搜索
mapping的作用是定义索引中的字段的名称定义字段的数据类型,比如字符串、数字、布尔字段,倒排索引的相关配置,比如设置某个字段为不被索引、记录 position 等在 ES 早期版本,一个索引下是可以有多个 Type ,从 7.0 开始,一个索引只有一个 Type,也可以说一个 Type 有一个 Mapping 定义。
dynamic定义了这个文档能都被搜索。
嵌套类型是什么东西