异常信息

核心提示在Please use a keyword field instead. Alternatively, set fielddata=true on [dataTimestamp] in order to load field data by uninverting the inverted index.
待排序字段dataTimestamp没有为排序优化,所以无法排序,需要配置FieldType.Keywordfielddata = true,可是代码中都配置了为什么还提示呢,往下看……

Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed];
nested exception is ElasticsearchStatusException
[Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]]; nested: ElasticsearchException[Elasticsearch exception
[type=illegal_argument_exception, reason=Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default.
Please use a keyword field instead. Alternatively, set fielddata=true on [dataTimestamp] in order to load field data by uninverting the inverted index. Note that this can use significant memory.]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [dataTimestamp] in order to load field data by uninverting the inverted index. Note that this can use significant memory.]]

环境

spring-data-elasticsearch 4.1.3
ElasticSearch 7.9.3

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>4.1.3</version>
</dependency>

spring-data-elasticsearch这块,对ElasticSearch 7.16之前的都差不多,相似版本可以尝试

代码配置

ElasticSearch实体

如下配置,异常提示需要将排序字段设置为Keyword类型(推荐),或者将fielddata设置为true(不推荐),可是我都设置了,还是提示上面的
注意:这里使用Spring ElasticSearch注解是否生效一定要注意,如果注解未生效就会导致声明的索引、字段信息都是无效的,所以配置了也没有,下面说如何检查

@Data
@Document(indexName = "test-index")
public class ElasticSearchEntity {/*** ElasticSearch Long型精度会丢失*/@Id@Field(type = FieldType.Keyword)private String dataId;// 配置二选一即可,推荐FieldType.Keyword,使用fielddata = true相对更占资源@Field(type = FieldType.Keyword, fielddata = true)private String dataTimestamp;}

检查ElasticSearch实体映射结果

项目启动后会自动在ElasticSearch创建索引,查询索引信息,有mapping才说明注解配置生效了,因为注解声明的字段信息在ElasticSearch对应的就是mapping

如果没有请检查,Java日志是否有如下类似的创建失败警告,按照警告提示修改实体注解配置,尝试至无警告创建,再到ElasticSearch查询索引是否正确加载mapping

[o.s.d.e.r.s.SimpleElasticsearchRepository,<init> : 96] - Cannot create index: Elasticsearch exception [type=mapper_parsing_exception, reason=Mapping definition for

ElasticSearch数据操作接口

public interface IndexRepository extends ElasticsearchRepository<ElasticSearchEntity, String> {}

查询调用(高级查询接口自定义)

这里先列出来两种写法,因为mapping字段声明未加载成功可导致使用时的问题,推荐第一种,所以上面如果有问题的检查一下

Criteria criteria = new Criteria("title").contains(keyword);// 1、没有加载mapping默认识别string类型,如果keyword声明加载成功这么写就可以了(推荐这种,所以上面如果有问题的检查一下)
Sort sort = Sort.by("_score", "dataTimestamp").descending();// 2、没有加载mapping默认为string类型创建keyword,Keyword类型才有索引可以排序,想使用Keyword索引要加.keyword使用,否则还是原字段
Sort sort = Sort.by("_score", "dataTimestamp.keyword").descending();Query query = new CriteriaQuery(criteria).setPageable(PageRequest.of(pageNum, pageSize, sort));SearchHits<ElasticSearchEntity> searchHits = elasticsearchRestTemplate.search(query, ElasticSearchEntity.class, IndexCoordinates.of("index-*"));

发现问题

各种查文档,都没有对spring-data-elasticsearch的这个异常处理方案,所以只能自己查了
既然是ElasticSearch的错误就去原生查询,查询时发现,ElasticSearch的dataTimestamp的字段有两个,因为没有加载mapping默认识别string类型,默认还会为string类型创建keyword,所以这时候有两种类型,使用的时候就要注意调用区分,如果keyword声明成功,就只有一个keyword类型,直接使用原字段就可以

原因

查询ElasticSearch文档对keyword的介绍,大致说一下我的理解,有问题望指正
Keyword是相当于对Text的一个补充,设置Keyword类型或当Text设置分词器、索引的时候,就会创建一个.keyword字段,用于更快速的查询,所以文本字段需要使用索引时,不可以直接使用原字段,要利用.keyword字段操作就可以了

spring-data-elasticsearch使用Sort排序时Please use a keyword field instead. ……异常解决相关推荐

  1. Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch

    什么是全文检索 数据分类 生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结 ...

  2. SpringBoot整合Spring Data Elasticsearch

    特点: 分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心) Restful风格,一切API都遵循Rest原则,容易上手 近实时搜索,数据更新在Elasticsear ...

  3. 【javaWeb微服务架构项目——乐优商城day07】——Elasticsearch介绍和安装及使用(安装kibana,安装ik分词器,Spring Data Elasticsearch,高级查询)

    文章目录 0.学习目标 1.Elasticsearch介绍和安装 1.1.简介 1.1.1.Elastic 1.1.2.Elasticsearch 1.1.3.版本 1.2.安装和配置 1.2.1.新 ...

  4. Spring Data ElasticSearch入门案例

    Spring Data ElasticSearch入门案例 创建maven工程elasticsearch_springdata 基于maven导入坐标 导入spring data elasticsea ...

  5. orderby排序慢_使用@OrderBy对Spring Data MongoDB集合进行排序

    orderby排序慢 这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值 ...

  6. 使用@OrderBy对Spring Data MongoDB集合进行排序

    这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值关联的元素的顺序. 在 ...

  7. SpringBoot207 - 集成 spring data elasticsearch

    扯淡: Spring Data Elasticsearch 是spring data对elasticsearch进行的封装.所以在springboot项目中使用es非常方便,直接在 dao 接口继承 ...

  8. Spring Data Elasticsearch聚合搜索实战

    准备环境 1 安装Elasticsearch 5.5.2 (略) 2 使用爬虫爬取厦门人才网相关招聘信息(略) 通过elasticsearch-head插件可以看到我们已经爬取很多数据了 3 在项目中 ...

  9. 通过Spring Data Elasticsearch操作ES

    Elasticsearch Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库,其中每 ...

最新文章

  1. 2022-2028年中国聚碳酸亚丙酯(PPC)行业市场深度分析及未来趋势预测报告
  2. 你还在从零搭建项目 ?
  3. JAVA的两个FTP包的比较
  4. 一份简单的在 Linux下编译及调试 C 代码的指南
  5. Windows环境下yolov3+darknet批量处理图片完整教程
  6. 软件工程——理论、方法与实践 第一章
  7. ffmpeg 为取经而来_伊力特的英雄情结从何而来?
  8. jpa级联添加_JPA中的一对多双向关联与级联操作
  9. pelco协议及其实现的简单认识
  10. HDU5687 Problem C【字典树】
  11. 小麦积分墙:我的App与微信搞上了
  12. display:inline-block 间隙
  13. CF547D Mike and Fish 建图
  14. CorelDRAWX4的VBA插件开发(二十)创建进度条来显示程序运行进度
  15. Uva 816 Abbott's Revenge 紫书165页例题
  16. 计算机科学美国大学专业,2015年U.S.NEWS计算机科学专业美国大学排名
  17. 内连接(inner join)与外连接(outer join)小结
  18. php编程语言教程,php语言教程
  19. 【论文复现】CBAM(2018)
  20. 微端是什么意思?微端对服务器性能配置要求

热门文章

  1. Linux下的Cannot find a valid baseurl for repo: base/7/x86_64问题记载
  2. angular.js-服务-http-路由(5)
  3. Shopify开店建站营销推广卖家平台后台中文指南 – Abandoned checkout recovery/挽救弃单
  4. Dojo JQuery
  5. 九年义务教育的精英,遇上十年寒窗苦读的翘楚,必将擦出耀眼的火花!
  6. 转:车规芯片的AEC-Q100测试标准
  7. Python网络爬虫入门案例
  8. 慕课java工程师2020版_2020智慧树慕课Java 程序设计答案最新最全课后作业答案
  9. Java电子信箱系统的设计与实现
  10. 魔兽地图编辑器插件YDWE的使用与基本设置6 输入管理器