Elasticsearch之settings和mappings(图文详解) Elasticsearch之settings和mappings(图文详解)

Elasticsearch之settings和mappings的意义

  简单的说,就是

  settings是修改分片和副本数的。

  mappings是修改字段和类型的。

  记住,可以用url方式来操作它们,也可以用java方式来操作它们。建议用url方式,因为简单很多。

1、ES中的settings

  查询索引库的settings信息

Elasticsearch之settings和mappings(图文详解) Elasticsearch之settings和mappings(图文详解)

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET :9200/zhouls/_settings?pretty
{
"zhouls" : {
"settings" : {
"index" : {
"creation_date" : "1488203759467",
"uuid" : "Sppm-db_Qm-OHptOC7vznw",
"number_of_replicas" : "1",
"number_of_shards" : "5",
"version" : {
"created" : "2040399"
}
}
}
}
}
[hadoop@HadoopMaster elasticsearch-2.4.3]$

settings修改索引库默认配置

  例如:分片数量,副本数量

  查看:curl -XGET :9200/zhouls/_settings?pretty

  操作不存在索引:curl -XPUT \'192.168.80.10:9200/liuch/\' -d\'{"settings":{"number_of_shards":3,"number_of_replicas":0}}\'

  操作已存在索引:curl -XPUT \'192.168.80.10:9200/zhouls/_settings\' -d\'{"index":{"number_of_replicas":1}}\'

总结:就是,不存在索引时,可以指定副本和分片,如果已经存在,则只能修改副本。

  在创建新的索引库时,可以指定索引分片的副本数。默认是1,这个很简单

2、ES中的mappings

  ES的mapping如何用?什么时候需要手动,什么时候需要自动?

Mapping,就是对索引库中索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。不过es的mapping比数据库灵活很多,它可以动态识别字段。一般不需要指定mapping都可以,因为es会自动根据数据格式识别它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping

  我们在es中添加索引数据时不需要指定数据类型,es中有自动影射机制,字符串映射为string,数字映射为long。通过mappings可以指定数据类型是否存储等属性。

  查询索引库的mapping信息

Elasticsearch之settings和mappings(图文详解) Elasticsearch之settings和mappings(图文详解)

[hadoop@HadoopMaster elasticsearch-2.4.3]$ curl -XGET :9200/zhouls/emp/_mapping?pretty
{
"zhouls" : {
"mappings" : {
"emp" : {
"properties" : {
"name" : {
"type" : "string"
},
"score" : {
"type" : "long"
},
"type" : {
"type" : "string"
}
}
}
}
}
}
[hadoop@HadoopMaster elasticsearch-2.4.3]$

mappings修改字段相关属性

  例如:字段类型,使用哪种分词工具啊等,如下:

注意:下面可以使用indexAnalyzer定义分词器,也可以使用index_analyzer定义分词器


操作不存在的索引
  curl -XPUT \'192.168.80.10:9200/zhouls\' -d\'{"mappings":{"emp":{"properties":{"name":{"type":"string","analyzer": "ik_max_word"}}}}}\'
操作已存在的索引
  curl -XPOST :9200/zhouls/emp/_mapping -d\'{"properties":{"name":{"type":"string","analyzer": "ik_max_word"}}}\'

  也许我上面这样写,很多人不太懂,我下面,就举个例子。(大家必须要会)

 

Elasticsearch之settings和mappings(图文详解) Elasticsearch之settings和mappings(图文详解)

第一步:先编辑tvcount.json文件

  内容如下(做了笔记):

{ "settings":{    #settings是修改分片和副本数的 "number_of_shards":3,    #分片为3 "number_of_replicas":0    #副本数为0 }, "mappings":{    #mappings是修改字段和类型的 "tvcount":{ "dynamic":"strict", "_all":{"enabled":false}, "properties":{ "tvname":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"},
                  如,string类型,analyzed索引,ik_max_word分词器 "director":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "actor":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "allnumber":{"type":"string","index":"not_analyzed"}, "tvtype":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "description":{"type":"string","index":"analyzed","analyzer":"ik_max_word","search_analyzer": "ik_max_word"}, "pic":{"type":"string","index":"not_analyzed"} } } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfwfj.html