一、ES实战
1.创建索引
创建索引时字段的映射是一个需要关注的问题!分为如下几种情况:
- 字段不会作为查询条件,但是需要返回给用户。建议将index设为false;
- 文档的字段值不能被分词,且搜索语句查询时使用的是term查询。建议字符串类型的字段设置为keyword;
- 文档的字段值会被分词,且搜索语句同样被分词,查询时使用match方式查询。建议字符串类型设置为text;
- text类型的文档分词器通常设置为ik_max_word,查询分词器设置为ik_smart。这样做一定程度上减少了相关性较低的文档返回数量。比如:当我的词库和查询语句同时包含
网络和数据中心这个词时,返回结果不会返回文档中仅有网络、和、数据、中心等部分词汇的文档。但是会出现查不全的问题:当我搜索文学院的男生时无法匹配到字段值为男的文档,因为搜索语句的分词结果是文学院、的、男生。
PUT personal_info
{
"mappings": {
"properties": {
"del_flag": {
"type": "keyword"
},
"entityId": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"name": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"type": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"专业": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"单位代码": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"单位名称": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"导师编号": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"年级": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"性别": {
"analyzer": "standard",
"search_analyzer": "standard",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"政治面貌": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"更新时间": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"民族": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"班级": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"电子邮箱": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"index": false
},
"电话": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"index": false
},
"职称": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"邮箱": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"index": false
},
"院系": {
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
2.添加文档
POST personal_info/_doc
{
"entityId":"202133697",
"name":"董方红s",
"type": "研究生",
"院系": "文学院",
"专业": "电子信息",
"年级": "2021",
"性别": "男",
"政治面貌": "共青团员",
"民族": "汉族",
"电话": "18340087501",
"邮箱": "173400844@qq.com",
"更新时间": "2022-09-18 11:20:44.0"
}
POST personal_info/_doc
{
"entityId": "202133690",
"name": "雷洁萍",
"type": "研究生",
"院系": "文学院",
"专业": "电子信息",
"年级": "2021",
"性别": "女",
"政治面貌": "中共党员",
"民族": "汉族",
"电话": "17340087533",
"邮箱": "173400844@qq.com",
"更新时间": "2022-09-18 11:20:44.0"
}
POST personal_info/_doc
{
"entityId":"202133691",
"name":"张浩伟",
"type": "研究生",
"院系": "信息科学与技术学院",
"专业": "电子信息",
"年级": "2021",
"性别": "男",
"政治面貌": "共青团员",
"民族": "蒙古族",
"电话": "17340087536",
"邮箱": "173400845@qq.com",
"更新时间": "2022-09-18 11:20:44.0"
}
POST personal_info/_doc
{
"entityId": "202133692",
"name": "张荣博",
"type": "研究生",
"院系": "信息科学与技术学院",
"专业": "电子信息",
"年级": "2021",
"性别": "男",
"政治面貌": "中共党员",
"民族": "汉族",
"电话": "17340087533",
"邮箱": "173400844@qq.com",
"更新时间": "2022-09-18 11:20:44.0"
}