[es7]在往elasticsearch插数据之前,mapping和setting要怎么配置呢?
文章目录
中文常用es插件
- elasticsearch-pinyin
- elasticsearch-ik
这两个插件应在插入数据前就安装好。
mapping和setting
settings和mappings的意义
elasticsearch中,每个index都有属于自己的一套mapping和setting设置,这两者需要在导入数据前就设置好。
settings主要是修改分片和副本数的。
mappings是修改字段和类型的。
常用术语 | 关系型数据库 | Elasticsearch |
---|---|---|
数据库 | database | index |
表 | table | type |
行 | row | document |
列 | column | field |
mapping和setting的设置过程
GET /索引名/_mapping // 查询mapping
GET /索引名/_settings // 查询mapping
GET host:port/{index}/_settings
以自己的项目经验为例,可以先创建一个索引,然后插入一条示例数据,便可使用 get 方法获取 index 的 setting,及其根据被插数据生成的 mapping。在原有 mapping、setting 的基础上,增加对应的setting 设置,根据自己的需求自定义 analysis,并细化 mapping 中每个字段的设置。
ES的mapping如何用?什么时候需要手动,什么时候需要自动?
Mapping,就是对索引库中索引的字段名称及其数据类型进行定义,类似于mysql中的表结构信息。不过es的mapping比数据库灵活很多,它可以动态识别字段。一般不需要指定mapping都可以,因为es会自动根据数据格式识别它的类型,如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储等),就必须手动添加mapping。
我们在es中添加索引数据时不需要指定数据类型,es中有自动影射机制,字符串映射为string,数字映射为long。通过mappings可以指定数据类型是否存储等属性。
setting 的详细设置
当 ES 自带的分词器不能满足需求的情况下,可以通过组合不同的 Character Filters,Tokenizer,Token Filter 来实现。
一个文本块(text)将被分词、分析为适用于倒排索引单独的词(term)。然后标准化这些词为标准形式,提高他们的“可搜索性”或“查全率”。这个工作是分析器(analyzer)完成的。一个分析器(analyzer)只是一个包装,其用于将字符过滤器、分词器、分词过滤器组合到一个包里,其工作流程如下。
首先字符串经过字符过滤器(character filter),他们的工作是在分词前处理字符串。字符过滤器能够去除 HTML 标记,或者转化为“&”为“and”。
下一步,分词器(tokenizer)被分词为独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将词语分开。
最后,每个词都通过分词过滤器(filter),它可以修改词(例如将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“a”、“and”、“the”等等)或者增加词(例如同义词像“jump”和“leap”)。
往索引中插入数据
插入数据示例
[
{
"courseDetailUrl": "https://www.icourse163.org/course/BUAA-89007",
"courseName": "航空航天概论",
"courseCoverUrl": "https://img-ph-mirror.nosdn.127.net/nIfa0p6KY_OYswDbNogLGA==/1458603329415573314.png",
"courseIsFree": 1,
"courseApplicant": 8472,
"courseGraderNum": 304,
"courseScore": 4.8,
"courseIntroduction": "\n 航空航天是人类拓展和探索大气层及宇宙空间的产物,代表着最先进的科学技术领域。航空航天概论主要讲述了航空航天基本概念、航空航天发展概况、飞行器的飞行原理、动力系统、构造及其机载设备等方面的基本知识、基本原理和常用技术。通过课程的学习,可以使学生对航空航天的基本知识和基本技术有一个比较全面的了解,同时也可以掌握航空航天技术的最新发展动态和发展趋势,是学生了解航空航天知识的重要窗口,也是培养学生对航空航天兴趣和爱好,激发学生热爱航空、献身航空的有效途径。\n",
"courseSyllabus": "\n\n第一周 航空航天发展概况第一周内容介绍第1讲 航空航天的概念、分类及作用第2讲 世界航空航天技术发展第3讲 中国航空航天技术发展第一周测试第二周 升力与阻力的产生第二周内容介绍第1讲 流体流动基本规律第2讲 飞机的升力第3讲 飞机的阻力第二周测试第三周 飞机气动布局及飞行性能第三周内容介绍第1讲 超声速飞行特点第2讲 飞机飞行性能第3讲 飞机操纵性与稳定性第三周测试第三周作业第四周 直升机飞行原理与航天器飞行原理第四周内容介绍第1讲 直升机的飞行第2讲 直升机的操纵第3讲 航天器飞行原理第四周测试第五周 航空器动力装置第五周内容介绍第1讲 活塞式发动机第2讲 涡轮喷气发动机第3讲 其他航空发动机第五周测试第五周作业第六周 航天器动力装置第六周内容介绍第1讲 液体火箭发动机第2讲 固体火箭发动机第3讲 非常规火箭发动机第六周测试第七周 飞行器导航与制导第七周内容介绍第1讲 导航与飞行控制第2讲 导弹的类型第3讲 导弹的制导第七周测试第八周 飞行器构造第八周内容介绍第1讲 飞机机体构造第2讲 飞机起落架第3讲 航天器构造第八周测试\n\n",
"School": {
"schoolLogoUrl": "https://img-ph-mirror.nosdn.127.net/Kv3j_azNQD8sFDvfqRFaHQ==/6597941679379294936.jpg",
"schoolName": "北京航空航天大学",
"schoolIntroduction": "https://www.icourse163.org/university/BUAA"
},
"Platform": {
"platformName": "中国大学mooc",
"platformIntroduction": "中国大学MOOC(慕课) 是国内优质的中文MOOC学习平台,由爱课程网携手网易云课堂打造。平台拥有包括985高校在内提供的千余门课程",
"platformIndexUrl": "https://www.icourse163.org/",
"platformId": "zgdxmk"
},
"Semester": [
{
"semesterStartTime": "2020-02-17",
"semesterEndTime": "2020-06-30",
"semesterStatus": 2,
"semesterReference": "https://www.icourse163.org/course/BUAA-89007/info",
"Teacher": [
{
"teacherName": "杨超",
"teacherPhotoUrl": "https://img-ph-mirror.nosdn.127.net/CZp5VCnhU9UljP8Vo_FuLw==/776870935821684376.jpg",
"teacherIntroduction": "教授,课程负责人"
},
{
"teacherName": "贾玉红",
"teacherPhotoUrl": "https://img-ph-mirror.nosdn.127.net/OMT9wW0HT5pHML_OTdsVJw==/1940488489543555909.jpg",
"teacherIntroduction": "教授,课程负责人"
},
{
"teacherName": "吴永康",
"teacherPhotoUrl": "https://img-ph-mirror.nosdn.127.net/wssozG8qHFe6R9mTYlxSrA==/6597351241635531066.jpg",
"teacherIntroduction": "副教授"
}
],
"semesterNo": 1
}
],
"courseId": "course_10001",
"courseCategory": [
"工学",
"国家精品"
]
},
{
"courseDetailUrl": "https://www.icourse163.org/course/DLMU-1001979017",
"courseName": "海上货物运输",
"courseCoverUrl": "https://edu-image.nosdn.127.net/02666AE0F5AD673B5AD883066FDA814B.jpg?imageView&thumbnail=426y240&quality=100",
"courseIsFree": 1,
"courseApplicant": 2159,
"courseGraderNum": 85,
"courseScore": 4.9,
"courseIntroduction": "\n海上货物运输是以船舶为载运工具,以货物为运输对象,通过海路,安全、优质、快速、经济地从始发港运达目的港的行为。《海上货物运输》课程是利用船舶静力学、材料力学、海运货物学、海运法规等知识研究各类海上运输货物的海运特性、各类运输船舶的货运性能、对货物在整个运输过程中的各个环节进行安全操作、有效管理的一门应用学科。其中货物主要包括普通杂货、特殊杂货、固体散货、液体散货、集装化货物,运输环节包括货物受载、配载、装载、积载、运载、卸载。课程的目的和任务是让学生掌握在海上货物运输过程中保证船舶、货物、人员、环境安全、货物完整及提高经济效益的基本原则,培养学生预防事故、正确面对事故和处理事故的能力。\n",
"courseSyllabus": "\n\n第一章 海运船舶与货物1.1 船舶基础知识1.2 船舶载货能力1.3 船舶性能介绍1.4 货物基础知识海运船舶与货物第一章章测试第二章 包装危险货物运输2.1 包装危险货物分类及危险性2.2 危险货物包装2.3 危险货物标志2.4 危险货物积载2.5 危险货物隔离2.6 国际海运危险货物规则包装危险货物运输第二章章测试第三章 普通杂货运输3.1 杂货分类及特性3.2 杂货船分类及结构特点3.3 普通杂货配装要求3.4 杂货船配载图编制3.5 普通杂货安全装运普通杂货运输第三章 章测试第四章 固体散货运输4.1 固体散货分类及特性4.2 固体散货船分类及结构特点4.3 固体散货装载计划编制4.4 固体散货安全装运4.5 水尺计重固体散货运输第四章 章测试第五章 散装谷物运输5.1 散装谷物海运特性5.2 散装谷物船结构特点及运输规则5.3 散装谷物配装5.4 散装谷物安全装运5.5 散装谷物船稳性核算散装谷物运输第五章章测试第六章 集装箱运输6.1 集装箱分类和标志6.2 集装箱船分类及结构特点6.3 集装箱船配装6.4 集装箱安全装运集装箱运输第六章 章测试第七章 特殊杂货运输7.1 货物单元积载与系固7.2 CSS规则7.3 重大件货物安全运输7.4 木材甲板货安全运输7.5 卷钢货物安全运输特殊杂货运输第七章 章测试第八章 液体散货运输8.1 石油安全运输8.2 石油计量8.3 散装化学品安全运输8.4 液化气体安全运输8.5 LNG安全运输液体散货运输第八章 章测试\n\n",
"School": {
"schoolLogoUrl": "https://img-ph-mirror.nosdn.127.net/EC0NQFDOLKHiBlNuAEKK_A==/6630699429303599547.png",
"schoolName": "大连海事大学",
"schoolIntroduction": "https://www.icourse163.org/university/DLMU"
},
"Platform": {
"platformName": "中国大学mooc",
"platformIntroduction": "中国大学MOOC(慕课) 是国内优质的中文MOOC学习平台,由爱课程网携手网易云课堂打造。平台拥有包括985高校在内提供的千余门课程",
"platformIndexUrl": "https://www.icourse163.org/",
"platformId": "zgdxmk"
},
"Semester": [
{
"semesterStartTime": "2020-03-02",
"semesterEndTime": "2020-06-30",
"semesterStatus": 2,
"semesterReference": "https://www.icourse163.org/course/DLMU-1001979017/info",
"Teacher": [
{
"teacherName": "田佰军",
"teacherPhotoUrl": "https://edu-image.nosdn.127.net/5AE9E42699C566441EBEFF43829319F2.JPG?imageView&thumbnail=180y180&quality=100",
"teacherIntroduction": "船长 副教授"
},
{
"teacherName": "王文新",
"teacherPhotoUrl": "https://edu-image.nosdn.127.net/D2559AFEDA5375DFEA5472B4FB8D646D.jpg?imageView&thumbnail=582y582&quality=100",
"teacherIntroduction": "副教授"
},
{
"teacherName": "姜华",
"teacherPhotoUrl": "https://edu-image.nosdn.127.net/AFB830FA8DC47BFB219352DDB5484FA8.jpg?imageView&thumbnail=582y582&quality=100",
"teacherIntroduction": "副教授"
}
],
"semesterNo": 1
}
],
"courseId": "course_10002",
"courseCategory": [
"工学",
"国家精品"
]
},
{
"courseDetailUrl": "https://www.icourse163.org/course/XZNU-1001754173",
"courseName": "中国古典诗文朗诵与吟诵",
"courseCoverUrl": "https://edu-image.nosdn.127.net/CDD4F37D1A7C19947B185CA159E8332E.jpg?imageView&thumbnail=510y288&quality=100",
"courseIsFree": 1,
"courseApplicant": 13302,
"courseGraderNum": 1118,
"courseScore": 4.8,
"courseIntroduction": "\n中国,是一个有着数千年文明的国度,一代又一代的人们将自己的心声凝结在诗文之中,使“中国心”成为一种延绵不断的永恒。汉语,是一种具有旋律感的有声语言,一代又一代的人们在诗文朗诵声中拥抱历史和感受当下,将过去、今天和未来华夏大地上的人们凝聚成“中国人”。本课程向你讲述中国诗文朗诵的历史传统,讲解朗诵古代各种文体的基本规则要领,解析和演示古诗文朗诵怎样把握作品的思想内涵和情感基调,怎样处理朗诵的音流节奏和语调语气,从而使古诗文朗诵既有古典风味又有现代审美品质。诗文吟诵,有两千多年传统,是一种独特的汉语声乐形态。近些年来,一度消歇的传统诗文吟诵逐步进入人们的视野,但仍然有不少人觉得传统吟诵既陌生又神秘。本课程向你讲述诗文吟诵的历史传统,展示全国各地老先生们有代表性的吟诵,讲解传统吟诵的基本规则,使你理解什么是真正的传统吟诵;传授古诗文吟诵的具体方法和操作要领,使你学会传统吟诵。古诗文吟诵,其实并不难,只要你有心学一学,进入本课程,你肯定能学会!同学们,传统吟诵之声,将来就靠你们传递下去呢!\n",
"courseSyllabus": "\n\n第一讲 中国汉语朗诵的传统和功能一、中国古代的诵读传统;二、古代诵读的功能。第一讲 中国汉语朗诵的传统和功能第二讲 古典诗文诵读的基本规则(上)一、古典诗文朗诵的语音;二、怎样处理古今音的差异; 三、古典诗文朗诵的“字声饱满”。第二讲 古典诗文诵读的基本规则(上)第三讲 古典诗文诵读的基本规则(下)一、古典诗文朗诵的“语流”;二、古典诗文朗诵的语调。第三讲 古典诗文诵读的基本规则(下)第四讲 诗意的表现:古典诗歌朗诵的要领(上)一、把握作品的主题和基本情调; 二、感受作品描绘的场景和意境; 三、体味作品的文学品位和人格气质。第四讲 诗意的表现:古典诗歌朗诵的要领(上)第五讲 诗意的表现:古典诗歌朗诵的要领(下)一、《蜀相》赏析及朗诵; 二、《将进酒》赏析及朗诵;三、《无题》赏析及朗诵;四、《游子吟》赏析及朗诵;五、《春江花月夜》赏析及朗诵。第五讲 诗意的表现:古典诗歌朗诵的要领(下)第六讲 《诗经》朗诵一、《诗经》介绍;二、《周颂·天作》赏析及朗诵; 三、《国风·关雎》赏析及朗诵;四、《魏风·伐檀》赏析及朗诵; 五、曹操《观沧海》赏析及朗诵。第六讲 《诗经》朗诵第七讲 楚辞朗诵一、楚辞介绍;二、《橘颂》赏析及朗诵; 三、《九歌·国殇》赏析及朗诵;四、《离骚》(节选)赏析及朗诵;五、刘邦《大风歌》赏析及朗诵;六、蔡琰《悲愤诗》赏析及朗诵。第七讲 楚辞朗诵第八讲 长篇叙事诗的朗诵一、叙事结构;二、叙事视角;三、叙事诗中的场景意境、人物形象、行为动作;四、《琵琶行》赏析及朗诵;五、《石壕吏》赏析及朗诵。第八讲 长篇叙事诗的朗诵第九讲 词体作品朗诵(上)一、词的结构与特点;二、柳永《雨霖铃》赏析及朗诵;三、周邦彦《虞美人》赏析及朗诵;四、陆游《钗头凤》赏析及朗诵;五、苏轼《江城子》赏析及朗诵;六、欧阳修《南歌子》赏析及朗诵。第九讲 词体作品朗诵(上)第十讲 词体作品朗诵(下)一、苏轼《念奴娇》赏析及朗诵;二、苏轼《水调歌头》赏析及朗诵;三、辛弃疾《破阵子》赏析及朗诵;四、辛弃疾《摸鱼儿》赏析及朗诵第十讲 词体作品朗诵(下)第十一讲 曲体作品朗诵一、曲体作品的特点; 二、关汉卿《四块玉》赏析及朗诵; 三、关汉卿《沉醉东风》赏析及朗诵; 四、马致远《夜行船》赏析及朗诵;五、乔吉《水仙子》赏析及朗诵;六、张可久《小桃红》赏析及朗诵第十一讲 曲体作品朗诵第十二讲 古典散文朗诵(上)一、散文的特征; 二、《论语》朗诵示例; 三、《孟子》朗诵示例;四、《庄子》朗诵示例;五、王勃《滕王阁序》(节选)赏析及朗诵; 六、刘禹锡《陋室铭》赏析及朗诵;七、杜牧《阿房宫赋》赏析及朗诵。第十二讲 古典散文朗诵(上)第十三讲 古典散文朗诵(下)一、范仲淹《岳阳楼记》赏析及朗诵;二、苏轼《赤壁赋》赏析及朗诵; 三、归有光《项脊轩志》赏析及朗诵。第十三讲 古典散文朗诵(下)第十四讲 传统的古典诗文吟诵及其当代价值(上)一、古代“吟”“诵”的含义;二、古代吟诵的特点;三、老先生的吟诵示例。第十四讲 传统的古典诗文吟诵及其当代价值(上)第十五讲 传统的古典诗文吟诵及其当代价值(下)一、对待传统吟诵的正确态度;二、全国各地老先生的吟诵示例。第十五讲 传统的古典诗文吟诵及其当代价值(下)第十六讲 传统古典诗文吟诵的基本规则与要领一、什么是传统的“吟诵调”;二、传统吟诵的第一规则:语步诵行; 三、传统吟诵的第二规则:吟腔的程式化与灵活性; 四、传统吟诵句格的几种形式;五、吟诵腔格。第十六讲 传统古典诗文吟诵的基本规则与要领第十七讲 绝句吟诗调与套调一、套调的运用;二、传统吟诵套调的两个注意点。第十七讲 绝句吟诗调与套调第十八讲 套调:不同诗体的吟诵(上)一、以绝套律;二、四言诗的套调吟诵。第十八讲 套调:不同诗体的吟诵(上)第十九讲 套调:不同诗体的吟诵(下)一、套吟《游子吟》;二、《将进酒》的吟诵示范。第十九讲 套调:不同诗体的吟诵(下)第二十讲 套调;词体的吟诵一、长短句的吟诵特点; 二、吟诵的“声情”与“词情”。第二十讲 套调;词体的吟诵\n\n",
"School": {
"schoolLogoUrl": "https://edu-image.nosdn.127.net/A53D3664B32C8E02EBEEE1BF4B40C7C3.png?imageView&thumbnail=220y80&quality=100",
"schoolName": "江苏师范大学",
"schoolIntroduction": "https://www.icourse163.org/university/XZNU"
},
"Platform": {
"platformName": "中国大学mooc",
"platformIntroduction": "中国大学MOOC(慕课) 是国内优质的中文MOOC学习平台,由爱课程网携手网易云课堂打造。平台拥有包括985高校在内提供的千余门课程",
"platformIndexUrl": "https://www.icourse163.org/",
"platformId": "zgdxmk"
},
"Semester": [
{
"semesterStartTime": "2020-02-17",
"semesterEndTime": "2020-06-15",
"semesterStatus": 3,
"semesterReference": "https://www.icourse163.org/course/XZNU-1001754173/info",
"Teacher": [
{
"teacherName": "李昌集",
"teacherPhotoUrl": "https://edu-image.nosdn.127.net/47A58DE84532B34F1433542E072B3012.jpg?imageView&thumbnail=180y180&quality=100",
"teacherIntroduction": "教授"
}
],
"semesterNo": 1
}
],
"courseId": "course_10003",
"courseCategory": [
"通识选修类",
"文学文化",
"国家精品"
]
}
]
自动生成的mapping和setting示例
用上面的数据示例,插入一条后,自动生成的配置如下。可以看到,主要的type有text和keyword两种类型。
其中,text代表es在检索时会对该字段进行分析处理,而keyword不会。
常用数据类型:text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object。
- 课程名、课程介绍这种希望能根据用户输入进行分析匹配而形成搜索结果的检索字段,一般使用text类型
- 课程类别、课程id、课程url等一般只提供展示功能的非检索字段,一般使用keyword
- 其它类型:有date(日期),long(整数),float(浮点数)、boolean(布尔)等,视情况确定。
{
"moocgle": {
"aliases": {},
"mappings": {
"properties": {
"Category": {
"properties": {
"categoryName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"Platform": {
"properties": {
"platformIndexUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"platformIntroduction": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"platformName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"School": {
"properties": {
"schoolIntroduction": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"schoolLogoUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"schoolName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"Semester": {
"properties": {
"Teacher": {
"properties": {
"teacherIntroduction": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"teacherName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"teacherPhotoUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"semesterEndTime": {
"type": "date"
},
"semesterReference": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"semesterStartTime": {
"type": "date"
},
"semesterStatus": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"courseApplicant": {
"type": "long"
},
"courseCoverUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"courseDetailUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"courseGraderNum": {
"type": "long"
},
"courseIntroduction": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"courseIsFree": {
"type": "boolean"
},
"courseName": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"courseScore": {
"type": "float"
},
"courseSyllabus": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1591233335295",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "AEbhPoF6SxyjGRYk1ZFIDA",
"version": {
"created": "7060199"
},
"provided_name": "moocgle01"
}
}
}
}
自己配置的setting示例
一般情况下,需要自己改动的配置信息主要有三个
-
number_of_shards :分片数
-
number_of_replicas :副本数
-
analysis :分析器,主要有char_filter、filter、tokenizer、analyzer
"settings" : {
"index" : {
"number_of_shards" : "3",
"number_of_replicas" : "0",
"provided_name" : "moocgle",
"creation_date" : "1590657614133",
"analysis" : {
"filter" : {
"pinyin_first_letter_and_full_pinyin_filter" : {
"keep_none_chinese_in_first_letter" : "true",
"lowercase" : "true",
"keep_original" : "false",
"keep_first_letter" : "true",
"trim_whitespace" : "true",
"type" : "pinyin",
"keep_none_chinese" : "true",
"limit_first_letter_length" : "16",
"keep_full_pinyin" : "false"
}
},
"analyzer" : {
"my_analyzer" : {
"filter" : [
"pinyin_first_letter_and_full_pinyin_filter"
],
"type" : "custom",
"tokenizer" : "ik_max_word"
}
}
},
"uuid" : "kdGvgX6VRlOtsPVTSLpFQQ",
"version" : {
"created" : "7060199"
}
}
}
总的来说,analysis的框架大概如下所示:
"settings":{
"analysis": { # 自定义分词
"filter": {
"自定义过滤器": {
"type": "edge_ngram", # 过滤器类型
"min_gram": "1", # 最小边界
"max_gram": "6" # 最大边界
}
}, # 过滤器
"char_filter": {}, # 字符过滤器
"tokenizer": {}, # 分词
"analyzer": {
"自定义分词器名称": {
"type": "custom",
"tokenizer": "上述自定义分词名称或自带分词",
"filter": [
"上述自定义过滤器名称或自带过滤器"
],
"char_filter": [
"上述自定义字符过滤器名称或自带字符过滤器"
]
}
} # 分词器
}
}
自己配置mapping
一般情况下,只需在嵌套情况和需要检索字段处的设置多加注意,其它的字段配置可以基本设置成keyword或其它简单类型。
以处理课程名为例。
ik_max_word 会将文本做最细粒度的拆分,比如会将“*人民大会堂”拆分为“*、中华人民、中华、华人、人民*、人民、*、大会堂、大会、会堂等词语。
ik_smart 会做最粗粒度的拆分,比如会将“*人民大会堂”拆分为*、人民大会堂。
以 courseName 为例,对其指定为 text 字段,表明其需要进行分析,并指定了索引时分析器和搜索时分析器,同时 fileds 中为 courseName 的一些“别名”。
- courseName.pinyin 用于拼音搜索。
- courseName.completion 实现的是补全建议。
- courseName.keyword 则是保留了完整字段,用于完整匹配课程名的场景。
一个完整的mapping例子如下:
"mappings": {
"properties": {
"Platform": {
"type": "nested",
"properties": {
"platformIndexUrl": {
"type": "keyword"
},
"platformIntroduction": {
"type": "keyword"
},
"platformName": {
"type": "keyword"
},
"platformId": {
"type": "keyword"
}
}
},
"School": {
"type": "nested",
"properties": {
"schoolIntroduction": {
"type": "text",
"analyzer": "ik_smart"
},
"schoolLogoUrl": {
"type": "keyword"
},
"schoolName": {
"type": "text",
"analyzer": "ik_smart"
}
}
},
"Semester": {
"type": "nested",
"properties": {
"Teacher": {
"type": "nested",
"properties": {
"teacherIntroduction": {
"type": "keyword"
},
"teacherName": {
"type": "keyword"
},
"teacherPhotoUrl": {
"type": "keyword"
}
}
},
"semesterStartNo": {
"type": "long"
},
"semesterEndTime": {
"type": "date",
"format": "yyyy-MM-dd"
},
"semesterReference": {
"index": false,
"type": "keyword"
},
"semesterStartTime": {
"type": "date",
"format": "yyyy-MM-dd"
},
"semesterStatus": {
"type": "long"
}
}
},
"courseCategory": {
"index": false,
"type": "keyword"
},
"courseApplicant": {
"type": "long"
},
"courseCoverUrl": {
"index": false,
"type": "keyword"
},
"courseDetailUrl": {
"index": false,
"type": "keyword"
},
"courseGraderNum": {
"type": "long"
},
"courseIntroduction": {
"type": "text",
"analyzer": "ik_smart"
},
"courseIsFree": {
"type": "byte"
},
"courseName": {
"type": "text",
"analyzer": "ik_smart"
},
"courseScore": {
"type": "float"
},
"courseSyllabus": {
"type": "text",
"analyzer": "ik_smart"
}
}
}