这是一个系列的第五篇,这篇介绍了如何开启关键词高亮。

目录

什么是关键词高亮

我们在使用搜索引擎的时候,搜索引擎会返回类似如下的结果:

baidu

在搜索结果里面,红色的就是关键词高亮。

开启关键词高亮

在搜索的时候,开启关键词高亮语法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET /fgo/_search
{
"query": {
"multi_match": {
"query": "不列颠传说中的王",
"fields": ["name", "description"]
}
},
"highlight": {
"fields": {
"description": {},
"name": {}
}
}
}

这里要注意几点:

  1. 我们把query里面的match,换成了multi_match,因为加了highlight参数的搜索,不支持_all选项,所以换成了multi_match。这里表示,我们只搜素name和description两个字段,不搜索class这个字段。
  2. 我们在query之后添加了highlight这个参数,里面是所有你要需要高亮的字段。注意,fields这里不是一个数组形式,而是一个object形式,因为里面还可以写很多参数,我们这里就把参数省略了。

返回结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
"took": 56,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 3.8001575,
"hits": [
{
"_index": "fgo",
"_type": "servant",
"_id": "1",
"_score": 3.8001575,
"_source": {
"name": "阿尔托莉雅・潘德拉贡",
"class": "Saber",
"description": "不列颠传说中的王,被称为骑士王。阿尔托莉雅是幼名,从成为王的那一天起就被称为亚瑟王。在那个骑士道如花般凋零的时代,用手中的圣剑为不列颠带来了短暂的和平与最后的繁荣。虽然史实上是男性,但在这个世界似乎是男装的丽人。"
},
"highlight": {
"description": [
"<em>不列颠</em><em>传说</em><em>中</em><em>的</em><em>王</em>,被称为骑士<em>王</em>。阿尔托莉雅是幼名,从成为<em>王</em><em>的</em>那一天起就被称为亚瑟<em>王</em>。在那个骑士道如花般凋零<em>的</em>时代,用手中<em>的</em>圣剑为<em>不列颠</em>带来了短暂<em>的</em>和平与最后<em>的</em>繁荣。虽然史实上是男性,但在这个世界似乎是男装<em>的</em>丽人。"
]
}
},
{
"_index": "fgo",
"_type": "servant",
"_id": "12",
"_score": 1.9587429,
"_source": {
"name": "吉尔伽美什",
"class": "Archer",
"description": "公元以前统治着苏美尔的都市国家乌鲁克的半神半人的王者。不仅仅是传说而是真实存在的人物,记述于人类最古的叙事诗《吉尔伽美什叙事诗》中的王。"
},
"highlight": {
"description": [
"公元以前统治着苏美尔<em>的</em>都市国家乌鲁克<em>的</em>半神半人<em>的</em>王者。不仅仅是<em>传说</em>而是真实存在<em>的</em>人物,记述于人类最古<em>的</em>叙事诗《吉尔伽美什叙事诗》<em>中</em><em>的</em><em>王</em>。"
]
}
},
{
"_index": "fgo",
"_type": "servant",
"_id": "11",
"_score": 0.518044,
"_source": {
"name": "卫宫",
"class": "Archer",
"description": "由于不是和其他英灵一样出自典故,不能被称为正统的英灵。由于这个英灵被称为守护者,所以它就像是由人类“应该存活下去”这个集体无意识中诞生出的像是防卫装置的东西。这个防卫装置所在的那一方被称为人类立场的抑止力,要点在于要选择没有名字的人们,没有知名度的正义的代理人。"
},
"highlight": {
"description": [
"由于不是和其他英灵一样出自典故,不能被称为正统<em>的</em>英灵。由于这个英灵被称为守护者,所以它就像是由人类“应该存活下去”这个集体无意识<em>中</em>诞生出<em>的</em>像是防卫装置<em>的</em>东西。这个防卫装置所在<em>的</em>那一方被称为人类立场<em>的</em>抑止力,要点在于要选择没有名字<em>的</em>人们,没有知名度<em>的</em>正义<em>的</em>代理人。"
]
}
},
{
"_index": "fgo",
"_type": "servant",
"_id": "5",
"_score": 0.18693273,
"_source": {
"name": "尼禄・克劳狄乌斯",
"class": "Saber",
"description": "自称是男装的丽人。既自我至上主义又自私任性,明朗豁达,像小孩子一样天真无邪、被万人爱戴的无所不能恣意妄为的皇帝。本名,尼禄・克劳狄乌斯・凯撒・奥古斯都・日耳曼尼库斯。罗马帝国的第5代皇帝。生涯被涂上谋略与毒之色彩的恶名昭彰的暴君。"
},
"highlight": {
"description": [
"自称是男装<em>的</em>丽人。既自我至上主义又自私任性,明朗豁达,像小孩子一样天真无邪、被万人爱戴<em>的</em>无所不能恣意妄为<em>的</em>皇帝。本名,尼禄・克劳狄乌斯・凯撒・奥古斯都・日耳曼尼库斯。罗马帝国<em>的</em>第5代皇帝。生涯被涂上谋略与毒之色彩<em>的</em>恶名昭彰<em>的</em>暴君。"
]
}
}
]
}
}

可以看到,每一条返回的结果里面,还有一个highlight字段,这里面保存了应该高亮的字段,凡是和搜索词有关的部分,都用了包了起来。这样,在网页前端显示的时候,可以用css将该部分换一种颜色显示,以达到高亮关键词的目的。

官网完整的高亮文档见这里,如有兴趣可以进去看下更详细的配置。

高亮关键词比较简单,接下来我们看一下现代搜索引擎另一个几乎必备的功能:搜索词建议


题图来源:Designed by Freepik

ElasticSearch官方教程:点此进入
Kibana官方教程:点此进入