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

推荐订阅源

V
V2EX
宝玉的分享
宝玉的分享
Jina AI
Jina AI
IT之家
IT之家
博客园 - Franky
MyScale Blog
MyScale Blog
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
雷峰网
雷峰网
WordPress大学
WordPress大学
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
美团技术团队
S
SegmentFault 最新的问题
罗磊的独立博客
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
D
Docker
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence

祈雨的笔记

安全多方计算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"
]
}
]
}
}