惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
U
Unit 42
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
博客园 - 司徒正美
Vercel News
Vercel News
I
InfoQ
GbyAI
GbyAI
C
Check Point Blog
B
Blog RSS Feed
Martin Fowler
Martin Fowler
B
Blog
MyScale Blog
MyScale Blog
腾讯CDC
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 三生石上(FineUI控件)

祈雨的笔记

安全多方计算MPC spark原理解析 kueue执行源码分析 spark on k8s执行源码分析 spark-operator源码解析 系统压测遇到的缓存击穿问题 我的世界PC与安卓联机 蚂蚁金服流量投放平台的AIG改造 G1大对象致Old区占用率高 日志打印导致接口响应率下跌分析 Groovy加载类导致OOM分析 ERROR日志打印导致CPU满载 记OceanBase死锁超时 应用发版期间服务响应超时 Ark Serverless初探 系统优化复盘一二三 The user specified as a definer does not exist Kong网关初探 API网关选型调研 CPU火焰图常用工具 配置中心选型调研 root操作Nginx导致用户组错误 基于Proxifier使用代理 FastJSON字段智能匹配踩坑 Nacos初探 记一次Nginx服务器CPU满荷载故障 基于券系统分库分表的思考 limit不参与SQL成本计算致索引失效 Linux常用性能监控命令 golang低版本http2偶现400
elasticsearch实现字符串排序
祈雨的笔记 · 2018-09-22 · via 祈雨的笔记

对于text类型字段,ES默认分词且不会建立正排索引。即使设置"fielddata": true建立正排索引后,对该字段的排序依然有问题:ES不会以整个字段文本排序,而是选择分词后的一个字段进行排序。

对于ES5.x可以设置需要排序的字段为keyword类型,该类型默认不分词且"doc_values":true即默认建立正排索引。

对于需要分词的字段,想实现字符串排序可以将该字段建立两次索引,一个索引设置为text类型用于分词,一个索引设置为keyword类型用于排序。示例如下:

1、建立两次索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PUT /testindex
{
"mappings": {
"testtype":{
"properties": {
"title":{
"type": "text",
"fields": {
"raw":{
"type": "keyword"
}
}
}
}
}
}
}

2、添加数据

1
2
3
4
PUT /testindex/testtype/1
{
"title":"hello world"
}

3、字符串排序

1
2
3
4
5
6
7
8
9
10
11
12
13
GET /testindex/testtype/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"title.raw": {
"order": "asc"
}
}
]
}

4、排序结果

返回结果中,可见ES是以该字段的整个字符串排序,而不是已分词后的一个字段排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "testindex",
"_type": "testtype",
"_id": "1",
"_score": null,
"_source": {
"title": "hello world"
},
"sort": [
"hello world"
]
}
]
}
}