开发者学堂课程【ElasticSearch 最新快速入门教程:Settings 和 Mappings_Mappings_Ⅱ_案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/642/detail/10681
Settings 和 Mappings_Mappings_Ⅱ_案例
内容介绍:
一、查询索引库元素值信息
二、操作不存在的索引
三、操作已存在的索引
一、查询索引库元素值信息
打开 Elasticsearch,此时存在 ok、chinese、bigdata、bank 四个索引库,如下:
查询 bigdata 索引库字段信息:
点击“基本查询”,在页面左上方操作框输入
gdata/”,中央输入栏中输入“_mappings”,并在下拉列表中选择“GET”,点击“提交请求”即可查询 bigdata 索引库相关字段信息。
可以查询某一 dep 的mappings 值,如 product,则在左上方搜索框中输入http://node01.9200:/bigdata/product,在中央输入框输入_mapping,即可查询其 mapping 值。查询结果如下(部分):
{
"bigdata": {
"mappings": {
"product": {
"properties": {
"Product(name=SQOOP,author=null , last_versi
on=1)": {
"properties": {
"6": {
"properties": {
"5}": {
"fields": {
"keyword": {
"type": "keyword"
"ignore_above": 256
}
}
}
} ,
"author": {
"keyword": {
"type": "keyword"
"ignore_above": 256
"last_version": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
"ignore_above": 256
}
...
...
此时显示结果为原始 JSON,若已经过定义,也可以在“提交请求”下方选择“图形视图”或“表格视图”。
二、操作不存在的索引
curl -XPUT 'localhost:9200/bigdata'
-d'{"mappings":{"emp":{"properties":{"name":{"type":"string","indexAnalyzer":"ik","searchanalyzer":"ik"} } } } }'
创建了一个索引库 bigdata,指定 mappings,其中 dep 的名称为 emp,其中的字段(properties)包括 name,其数据类型(type)为 string,分词器(indexAnalyzer)为 ik 分词器,搜索分词器(searchanalyzer)为 ik 分词器。
点击“基本查询”,在页面左上方操作框输入
gdata/emp”,中央输入栏中输入“_mappings”,并在下拉列表中选择“PUT”。在下方输入框中输入如下内容:
{
"mappings": {
"emp": {
"properties": {
"name": {
"type":"string",
"indexAnalyzer":"ik",
"searchanalyzer":"ik"
}
}
点击“验证 JSON”,系统报错,即索引库 bigdata 已存在(index[bigdata/BN7REDzSRfy947JIHZmYvQ]already exist)因为该操作针对的是不存在的索引库,而 bigdata 已存在,则必须修改上方搜索框内容。
搜索框内容修正为http://node01.9200/text再提交,发现仍旧报错,创建 emp 失败,进入“复合查询”,发现并未成功创建 text 索引库,提示原因为 Failed to parse mapping [emp]:No handler for type [string] declared on field [name],即没有类型为 string 的处理器声明为 name 字段。
若将下方输入框的内容修改为如下内容:
{
"mappings": {
"emp": {
"properties": {
"name": {
"type":"text",
"indexAnalyzer":"ik",
"searchanalyzer":"ik"
}
即将字段 name 的类型改为 text,提交申请,仍报错,提示原因为:Mapping definition for [name] has unsupported parameters:[searchAnalyzer:ik] [indexAnalyzer:ik],即 name 字段不支持 searchA=nalyzer:ik 和indexAnalyzer:ik。
进入官网 github.com,在页面右上角搜索框中输入 ik,点击搜索结果中第一条“medcl/elasticsearch-analysis-ik”,结果中包含 Elasticsearch 与 ik 的定义关系,创建映射中(create a mapping)显示字段定义部分的内容:
"properties": {
"content": {
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
故将下方的文本输入框中的内容修改为:
{
"mappings": {
"emp": {
"properties": {
"name": {
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
}
}
再次点击“提交请求”,结果显示正确。
以上报错原因可能为新的版本不支持原本输入的旧语法。
点击“概览”,并刷新,发现此时已存在名为“test”的索引库。点击其下方的“信息”中的“索引信息”,即可查询到该索引库的相关信息(包括 provided_name 等信息)。
三、操作已存在的索引
curl -XPOST
http://localhost:9200/bigdata/dep/_mapping
-d'{"properties":{"name":{"type":"string","indexAnalyzer":"ik","searchanalyzer":"ik"} } } '
在“概览”中查询,点击 OK 索引库的索引信息,发现 context 字段不支持 ik 分词器,因为在创建 dep 时没有进行定制。并且可以发现其中含有一个名为 news 的 dep。
回到 Elasticsearch,点击“复合查询”,在最上方搜索框中输入“http://node01.9200/ok/news”,中间输入框中输入“_mapping”,右方最下方文本输入框中输入以下内容:
{
"properties": {
"context": {
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
}
点击“提交请求”后,进入“概览”页面,刷新,索引库 OK 下方的索引信息中则出现了"analyzer":"ik_max_word"及"search_analyzer":"ik_smart"的信息。
总结:
Mappings 是用来操作索引库中特定 dep 的元素值信息,其中包括 dep 中的字段类型、分词器类型等。
若操作的是不存在的索引,则进入索引库时应指定一个 dep,为该 dep 定制相应的元素值信息;而对于已存在的索引,则使用 POST 的方式,直接定位到索引库中的 dep,方可针对特定属性进行修改。