es笔记---新建es索引

es对索引的一堆操作都是用restful api去进行的,参数时一堆json,一年前边查边写搞过一次,这回搞迁移,发现es都到6.0版本了,也变化了很多,写个小笔记记录一下。

创建一个es索引很简单,一个put请求。

PUT /my_index
{
    "settings": { ... any settings ... },
    "mappings": {
        "type_one": { ... any mappings ... },
    },
  "aliases" : {...}
}

新建一个索引,包含settings mappings 和aliases。settings设置分片等一些参数,mappings设置如何处理索引的各个type,aliases以前没有用过,看上去我不太会用到,这边就不记录了。

settings

这边有非常多的参数可以设置,不过官方是不建议修改的。常见需要改的就俩

  • number_of_shards
    每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
  • number_of_replicas
    每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
PUT /my_temp_index
{
    "settings": {
        "number_of_shards" :   3,
        "number_of_replicas" : 2
    }
}

给索引设置settings值

PUT /my_temp_index/_settings
{
    "number_of_replicas": 1
}

修改settings值

mappings

每个文档都有type,每种type都会有自己的mapping。mapping定义了type的field,每个field的数据类型,以及es如何处理这些field。

注意,一个mappings里边不建议有多个type,而且在es6之后的版本很有可能会不允许有多个type。

按照官方的计划,es7-es9会逐步去掉type

建议是每个index都只有一个type,原因是一个index中的各个type的字段并不是完全独立的,一个index中多个type会造成一些浪费。

可以通过/_mapping 来查看es中一个或多个索引中的一个或多个mapping。

数据类型 (field)

  • 字符串 string
    • text
    • keyword
  • 数字
    • long integer short byte double float half_float scaled_float
  • 布尔型 boolean
  • 日期 date
  • range
    • integer_range
    • float_range
    • long_range
    • double_range
    • date_range
  • array
  • object

还有很多我确定我不会用到的类型。

当索引一个包含新的field的文档时,es会使用<b>动态映射</b>,通过JSON中基本数据类型,尝试猜测field类型

一般情况下,默认映射就足够了。es会自动把如 123 映射为integer,123.123映射为double,但是很多情况下,我们都需要自定义映射,特别是string类型。

自定义映射可以做这些事:

  • 配置为全文字符串和精确字符串 (如name字段我更希望他不要分词,而desc字段更需要分词后搜索)
  • 使用特定语言分析器
  • 。。。

一个field最主要的属性是type,对于大部分field,一般只需要设置type就可以了:

{
    "number_of_clicks": {
        "type": "integer"
    }
}

range

PUT range_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "expected_attendees": {
          "type": "integer_range"
        },
        "time_frame": {
          "type": "date_range", 
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        }
      }
    }
  }
}

插入格式

PUT range_index/my_type/1
{
  "expected_attendees" : { 
    "gte" : 10,
    "lte" : 20
  },
  "time_frame" : { 
    "gte" : "2015-10-31 12:00:00", 
    "lte" : "2015-11-01"
  }
}

搜索格式

POST range_index/_search
{
  "query" : {
    "range" : {
      "time_frame" : { 
        "gte" : "2015-10-31",
        "lte" : "2015-11-01",
        "relation" : "within" 
      }
    }
  }
}

这部分比较简单 不细致展开了

string

对于string类型,以前是只有string,现在分为了两种,keyword和text

text

text会先经过分析器,然后索引起来,类似desc这样的字段就需要使用text。有以下几个重要字段。

analyzer

分析器,可以指定如何处理这个string,比如我想先把所有html的标记全去掉,再分词,再删除无用的停顿次,然后把剩下的token索引起来。可以使用默认的standard分析器,也可以指定别的内置的分析器。也可以使用插件安装的第三份分析器,如ik,也可以自定义分析器。

分析器使用起来很简单

{
    "desc": {
        "type":     "string",
        "analyzer": "ik_smart"
    }
}

其中,ik_smart是已经安装好的第三方分析器。

index

是否设置为可以搜索,boolean

norm

我理解是算分时是否进行一些标准化处理,需要额外的资源。

fields

这个字段很有趣.. 先看个例子

"filename":{  
  "type":"text",
  "norms":false,
  "fields":{  
     "raw":{  
        "type":"keyword",
        "ignore_above":256
     }
  }
},

一个filename的字段,这边设置的是type是text,会分词搜索。但有时候我们需要精准匹配,就可以使用filename.raw。插入时只需要输入filename,保存在es里边的会有两份,filename和filename.raw。

keyword

和text不同,keyword不会经过分析器,搜索时会精确匹配。

index fields

这两个参数和text的相同

ignore_above

丢掉超过一定长度的字符串


映射操作
新建映射
PUT /index_name
{
  "mappings": {
    "person" : {
      "properties" : {
        "desc" : {
          "type" :    "string",
          "analyzer": "ik_smart"
        },
        "birth" : {
          "type" :   "date"
        },
        "name" : {
          "type" :   "string",
          "index" : "not_analyzed"
        },
        "user_id" : {
          "type" :   "long"
        }
      }
    }
  }
}

新建一个index,desc字段用ik分词索引,birth设置为日志,name字段精确索引,user_id设置为long型。

更新映射
PUT /index_name/_mapping/person
{
  "properties" : {
    "tag" : {
      "type" :    "string",
      "index":    "not_analyzed"
    }
  }
}

新增一个tag字段。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 概述 搜索引擎应该同时支持精确搜索与全文搜索两种模式。精确搜索是指当文档指定字段的内容与关键字完全相等时,才会将文...
    为为王阅读 1,617评论 3 0
  • 删除索引 用以下的请求来 删除索引: 对一些人来说,能够用单个命令来删除所有数据可能会导致可怕的后果。如果你想要避...
    techhow阅读 1,078评论 0 1
  • 数度王朝,绝代风流,自古御园。 看秦淮十里,亭台晚照; 紫金百仞,翠柳含烟。 画舫楼船,南朝旧迹, 伤心日月换人间...
    澧水幽兰阅读 909评论 1 15
  • 人人必看-罗辑思维(罗胖)谈-如何购买商业保险的清单 陶慧-----清单作者,理财规划师 市面上的保险五花八门,我...
    道复有无阅读 188评论 0 0