ES使用text类型字段排序报错
elasticsearch text字段排序报错解决
使用elasticsearch 进行排序的时候,我们一般都会排序数字、日期。但是在排序text类型的时候就会出现错误。
GET xytest/sutdent/_search
{
"sort":[
{"region": {"order": "asc"}}
]
, "from": 0
, "size": 2
}
结果如下:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [region] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "xytest",
"node": "6h-7wPJmQqWGfz6nbgqjjQ",
"reason": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [region] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
}
],
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [region] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
}
},
"status": 400
}
主要原因是:"Fielddata is disabled on text fields by default. Set fielddata=true on [region] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."
参考官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html
方案一:我们可以用region.keyword进行聚合,排序。用region用来查询。那么我们对我们的查询进行修改
GET xytest/sutdent/_search
{
"sort":[
{"region.keyword": {"order": "asc"}}
]
, "from": 0
, "size": 2
}
修改后查询结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 6,
"max_score": null,
"hits": [
{
"_index": "xytest",
"_type": "sutdent",
"_id": "6",
"_score": null,
"_source": {
"sid": "00006",
"name": "牧琢杭",
"age": "26",
"region": "广东省 湛江市 赤坎区",
"grade": [
{
"数学": 80
},
{
"语文": 63
},
{
"英语": 90
}
]
},
"sort": [
"广东省 湛江市 赤坎区"
]
},
{
"_index": "xytest",
"_type": "sutdent",
"_id": "5",
"_score": null,
"_source": {
"sid": "00005",
"name": "范旭",
"age": "30",
"region": "新疆维吾尔自治区 和田地区 和田县",
"grade": [
{
"数学": 90
},
{
"语文": 69
},
{
"英语": 60
}
]
},
"sort": [
"新疆维吾尔自治区 和田地区 和田县"
]
}
]
}
}
方案二:这是region这个排序字段的fileddata为true。
PUT xytest/_mapping/sutdent
{
"properties": {
"region":{
"type": "text",
"fielddata": true
}
}
}
设置结果:
{
"acknowledged": true
}
我们再次运行最开始的查询:
GET xytest/sutdent/_search
{
"sort":[
{"region": {"order": "asc"}}
]
, "from": 0
, "size": 2
}
返回结果:
{
"took": 130,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 6,
"max_score": null,
"hits": [
{
"_index": "xytest",
"_type": "sutdent",
"_id": "6",
"_score": null,
"_source": {
"sid": "00006",
"name": "牧琢杭",
"age": "26",
"region": "广东省 湛江市 赤坎区",
"grade": [
{
"数学": 80
},
{
"语文": 63
},
{
"英语": 90
}
]
},
"sort": [
"东"
]
},
{
"_index": "xytest",
"_type": "sutdent",
"_id": "4",
"_score": null,
"_source": {
"sid": "00004",
"name": "符龙",
"age": "37",
"region": "河北省 保定市 清苑县",
"grade": [
{
"数学": 80
},
{
"语文": 79
},
{
"英语": 69
}
]
},
"sort": [
"保"
]
}
]
}
}
ES使用text类型字段排序报错的更多相关文章
- Elasticsearch 6.2.3版本 string 类型字段 排序 报错 Fielddata is disabled on text fields by default
背景说明 最近在做一个 Elasticsearch 的分页查询,并且对查询结果按照特定字段进行排序的功能. 但是执行结果却报错,报错信息如下: { "error": { " ...
- ElasticSearch 6.2 Mapping参数说明及text类型字段聚合查询配置
背景: 由于本人使用的是6.0以上的版本es,在使用发现很多中文博客对于mapping参数的说明已过时.ES6.0以后有很多参数变化. 现我根据官网总结mapping最新的参数,希望能对大家有用处. ...
- Sql 中text类型字段判断是否为空
用 len关键字,字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注: ...
- [转]sql中判断text类型字段是否为空
用 字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注:SQL中的DA ...
- MSSQL数据库中Text类型字段在PHP中被截断之解 (转)
在PHP中使用了MSSQL数据库,恰巧数据库中又使用了Text类型字段,于是问题产生了.每次从数据库中查询得到的数据总是被莫名的截断,一开始是以为我使用的PHP框架中对字符串的长度有所限制,后来发现这 ...
- MySQL 表与字段编码格式报错
MySQL 表与字段编码格式报错 一.数据库,表,字段编码格式都为latin1(iso-8859-1) .当数据保存到数据库后,中文显示乱码. 解决办法: 1.在访问数据库连接串中添加编码格式: &l ...
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Stu ...
- DB2读取CLOB字段-was报错:操作无效:已关闭 Lob。 ERRORCODE=-4470, SQLSTATE=null
DB2读取CLOB字段-was报错:操作无效:已关闭 Lob. ERRORCODE=-4470, SQLSTATE=null 解决方法,在WAS中要用的数据源里面配置连个定制属性: progressi ...
- 使用like查询text类型字段
使用like查询text类型字段 public bool Exists(GetReadType GRT, ClientMessageGetRead TypeID, string MessageID, ...
随机推荐
- [CSP-S模拟测试]:字符交换(贪心+模拟)
题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作 ...
- 【学习】SpringBoot之自定义拦截器
/** * 自定义拦截器 **/ @Configuration//声明这是一个拦截器 public class MyInterceptor extends WebMvcConfigurerAdapte ...
- 基于dubbo的分布式系统(一)安装docker
1.安装过程参考: #uname -r 查看内核是否高于3.10 #sudo yum update root权限登陆确保yum包最新 #sudo yum remove docker docker-c ...
- Eclipse如何安装Fat Jar
〇.安装前准备 1.Fat Jar插件下载地址:https://sourceforge.net/projects/fjep/files/ 2.安装前请确认Eclipse版本:Help --> A ...
- mysql的性能优化简介
mysql性能下降的原因 sql语句本身有问题,或没建索引 索引失效,索引失效的原因本文后面会叙述 关联了过多的表,可能是前期设计缺陷,或者太奇葩的需求 服务器调优及参数设置,例如缓冲.线程等 mys ...
- ping命令介绍
1.ping是TCP/IP协议的一部分,所以只要安装了TCP/IP协议就(无论windows或linux)都可以使用ping命令. 2.ping命令的原理:本机创建一个数据包发送给(ping对象)目标 ...
- LoadRunner 技巧之 脚本设计
LoadRunner 技巧之 脚本设计 在做性能测试时,我们可能会遇到各种不同的业务需求与用户行为,在一个系统或网站中,每个用户的操作都不完全一样.我们如何来模拟这此用户的行为?经验与能力有限,我这里 ...
- python之reportlab生成PDF文件
项目需要,需要自动生成PDF测试报告.经过对比之后,选择使用了reportlab模块. 项目背景:开发一个测试平台,供测试维护测试用例,执行测试用例,并且生成测试报告(包含PDF和excel),将生成 ...
- PPT鼠绘必须掌握的PPT绘图三大核心功能
在PPT制作教程栏目中,陆陆续续的分享了一系列通过合并形状功能来绘图的教程,绘制安卓机器人.绘制西瓜.绘制鸡蛋.其实,合并形状功能只是PPT绘图的一部分,而真正想要掌握PPT鼠绘,仅仅是会使用合并形状 ...
- java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...