目录
目标
掌握es高亮显示语法,包括自定义高亮标签属性、多字段高亮显示。
ES版本信息
7.17.5
官方文档
Highlightinghttps://www.elastic.co/guide/en/elasticsearch/reference/7.17/highlighting.html
创建索引
PUT /products_db
{
"settings": {
"index": {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}
索引文档
PUT /products_db/_bulk
{"index":{"_id":"1"}}
{"proId":1,"prodName":"苹果13","title":"【24期免息 可选13promax】现货速发/Apple/苹果13 iPhone13手机可选苹果5G新品苹果官方旗舰店正品"}
{"index":{"_id":"2"}}
{"proId":2,"prodName":"苹果13","title":"【24期免息】苹果13 iphone13 Apple/苹果iPhone 13 5G手机官方旗舰正品官网苹果13手机iPhone13手机"}
{"index":{"_id":"3"}}
{"proId":3,"prodName":"李宁v8跑步鞋","title":"李宁v8跑步鞋女鞋新款风铃灰老爹鞋透气情侣运动鞋潮流休闲鞋男鞋"}
{"index":{"_id":"4"}}
{"proId":4,"prodName":"李宁休闲鞋","title":"LI-NING 1990李宁1990夏季女士蝴蝶休闲鞋"}
{"index":{"_id":"5"}}
{"proId":5,"prodName":"千井惠休闲鞋","title":"狮冬季白色鞋子韩版潮流春秋运动休闲板鞋男生小白鞋学生百搭白潮"}
{"index":{"_id":"6"}}
{"proId":6,"prodName":"张裕红酒","title":"张裕红酒 特选级干红葡萄酒圆筒750mlx6瓶婚庆婚宴年货送礼"}
{"index":{"_id":"7"}}
{"proId":7,"prodName":"安踏男鞋跑步鞋","title":"安踏男鞋跑步鞋2022夏季新款跑鞋官网官方旗舰店正品男款运动鞋男"}
实战
基本语法
需求:搜索关键词为"李宁跑步鞋",匹配字段为title,要求title字段的分词显示高亮。
第一步:对关键词"李宁跑步鞋"进行分词。这里用的是IK分词器。
POST _analyze
{
"analyzer": "ik_max_word",
"text": "李宁跑步鞋"
}
第二步:搜索。
GET /products_db/_search
{
"query": {
"match": {
"title": "李宁跑步鞋"
}
},
"highlight": {
"fields": {
"title": {}
}
}
}
多字段高亮显示
参数:默认情况下只能将搜索字段的分词显示高亮,即require_field_match默认为true。将该参数设置为false则所有字段可以显示高亮。
需求一:搜索关键词为"李宁跑步鞋",匹配字段为title,要求title字段,prodName字段的分词显示高亮。
GET /products_db/_search
{
"query": {
"match": {
"title": "李宁跑步鞋"
}
},
"highlight": {
"require_field_match": "false",
"fields": {
"title": {},
"prodName": {}
}
}
}
需求二:搜索关键词为"李宁跑步鞋",匹配字段为title,要求所有字段的分词显示高亮。
GET /products_db/_search
{
"query": {
"match": {
"title": "李宁跑步鞋"
}
},
"highlight": {
"require_field_match": "false",
"fields": {
"*": {}
}
}
}
自定义高亮样式
pre_tags参数:前置标签。默认为<em>,即高亮样式默认为<em>标签。
post_tags参数:后置标签。默认为</em>,即高亮样式默认为<em>标签。
需求:自定义高亮标签为<span>,设置字体为红色。
GET /products_db/_search
{
"query": {
"match": {
"title": "李宁跑步鞋"
}
},
"highlight": {
"pre_tags": [
"<span style='color:red'>"
],
"post_tags": [
"</span>"
],
"require_field_match": "false",
"fields": {
"*": {}
}
}
}