Elasticsearch 搜索排序、相关性及分布式执行详解
字符串排序与多字段
在 Elasticsearch 中,分析后的字符串字段属于多值字段,但对其进行排序往往难以得到预期结果。例如,对 “fine old art” 这样的字符串进行分析,会得到三个词项。我们通常希望按第一个词项、第二个词项依次进行字母排序,但 Elasticsearch 在排序时无法利用这些信息。
虽然可以使用 min 和 max 排序模式(默认使用 min ),但这会导致按 “art” 或 “old” 排序,并非我们的本意。
为了对字符串字段进行排序,该字段应仅包含一个词项,即未分析的整个字符串。但我们仍需要对该字段进行分析,以便进行全文查询。
一种简单的方法是在文档中包含两个独立的字段:一个用于搜索的分析字段和一个用于排序的未分析字段。然而,在 _source 字段中存储相同的字符串两次会浪费空间。我们真正想要的是传入一个字段,但以两种不同的方式对其进行索引。所有核心字段类型(字符串、数字、布尔值、日期)都接受 fields 参数,可将简单映射转换为多字段映射。
例如,将简单映射:
"tweet": {
"type": "string",
"analyzer": "english"
}
转换为多字段映射:
超级会员免费看
订阅专栏 解锁全文
1

被折叠的 条评论
为什么被折叠?



