• 整合easy-es后。调接口能返回,但是一直会报错


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 weixin_52461796 2024-03-30 21:34 采纳率: 0% 浏览 13 首页/ 编程语言 / 整合easy-es后。调接口能返回,但是一直会报错 javaspring boot 2024-03-30 21:28:59.068 INFO 12600 --- [p-nio-81-exec-1] easy-es : ===> Execute By Easy-Es:routing: nullindex-name: yin_linDSL:{"size":10000,"query":{"bool":{"must":[{"term":{"song_title.keyword":{"value":"锦鲤抄","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}},"track_total_hits":2147483647}2024-03-30 21:28:59.394 WARN 12600 --- [p-nio-81-exec-1] org.elasticsearch.client.RestClient : request [POST https://127.0.0.1:9200/yin_lin/_search?typed_keys=true&max_concurrent_shard_requests=5&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=query_then_fetch&batched_reduce_size=512] returned 1 warnings: [299 Elasticsearch-8.12.2-48a287ab9497e852de30327444b0809e55d46466 "[ignore_throttled] parameter is deprecated because frozen indices have been deprecated. Consider cold or frozen tiers in place of frozen indices."]org.dromara.easyes.common.exception.EasyEsException: no such method: at org.dromara.easyes.common.utils.ExceptionUtils.eee(ExceptionUtils.java:49) at org.dromara.easyes.core.cache.BaseCache.lambda$setterMethod$6(BaseCache.java:126) at java.util.Optional.orElseThrow(Optional.java:290) at org.dromara.easyes.core.cache.BaseCache.setterMethod(BaseCache.java:126) at org.dromara.easyes.core.kernel.BaseEsMapperImpl.setId(BaseEsMapperImpl.java:1646) at org.dromara.easyes.core.kernel.BaseEsMapperImpl.parseOne(BaseEsMapperImpl.java:1202) at org.dromara.easyes.core.kernel.BaseEsMapperImpl.lambda$selectList$18(BaseEsMapperImpl.java:625) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • Kwan的解忧杂货铺 Java领域优质创作者 2024-03-30 21:34
      关注

      晚上好🌙🌙🌙
      本答案参考ChatGPT-3.5

      根据给出的错误信息,问题是在调用easy-es接口时出现了异常。异常信息是no such method。

      根据异常信息可以确定,BaseEsMapperImpl类的setId方法中找不到相应的方法。这可能是因为Easy-Es框架的版本问题或者在模型映射类中的操作方法有问题。

      解决此问题的方法有以下几种:

      1. 确保使用的Easy-Es框架版本与您的项目兼容。可以尝试升级或降级Easy-Es版本以解决兼容性问题。
      2. 检查模型映射类(MyEsMapper)中的setId方法是否存在,并确保方法名和参数列表与框架要求的一致。如果不存在该方法,可以添加该方法来设置模型的唯一标识字段。
      3. 检查模型映射类(MyEsMapper)中是否存在其他操作方法与Easy-Es的要求不一致,如果有,请进行相应的修改。
      4. 检查是否正确引入了Easy-Es的依赖,并在配置文件中正确配置了相关的参数。
      5. 查看Easy-Es的文档和示例代码,了解框架的基本使用方法,确保您的代码与框架的要求相符。

      代码修改示例:

      public class MyEsMapper extends BaseEsMapperImpl {
          // 根据需要添加或修改其他操作方法
      
          @Override
          protected void setId(YinLin entity, String id) {
              // 设置模型的唯一标识字段
              entity.setId(id);
          }
      }
      

      请注意,这只是一个示例代码,具体的修改可能需要根据您的项目需求和框架要求进行调整。

      总的来说,问题的解决方法需要根据具体的代码和环境来确定。如果以上解决方案不能解决问题,请提供更多的代码和错误堆栈信息,以便我们更好地帮助您解决问题。

      评论 编辑记录
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 21:34
      关注

      引自免费微信小程序:皆我百晓生

      在整合easy-es后,当调接口时出现报错,错误信息为no such method:,这通常表明在调用特定方法时,所引用的方法在目标类(此处为MyEasyEsService)中不存在或已经被移除。在这种情况下,解决这个问题可以分为以下步骤:

      1. 检查是否已移除easy_es依赖项
        • 在项目根目录中添加以下依赖:
      dependencies {
          implementation 'org.elasticsearch:elasticsearch:7.x'
          implementation 'org.elasticsearch:easy-es-client:7.x'
      }
      
      1. 确认是否已经引入LambdaEsQueryWrapper用于ES查询并使用Lambda扩展器(lambdaEsQueryWrapper)
        • 首先,在MyEasyEsService的源代码中,确保使用以下依赖注入链加载LambdaEsQueryWrapper
      import org.elasticsearch.client.RestClient;
      import org.elasticsearch.client.RestHighLevelClient;
      
      @Autowired
      private RestHighLevelClient restHighLevelClient;
      
      public MyEasyEsService() {
          restHighLevelClient.setTransport(new HttpSettingsBuilder()
                  .setHost("localhost")
                  .setPort(9200)
                  .build());
      }
      
      // 使用`LambdaEsQueryWrapper`创建`LambdaEsQueryWrapper`对象并设置其相关参数
      private LambdaEsQueryWrapper lambdaEsIndexWrapper = new LambdaEsQueryWrapper<>();
      lambdaEsIndexWrapper.eq( column: "song_title", val: "锦鲤抄");
      
      List yinLins = myEsMapper.selectList(lambdaEsIndexWrapper);
      
      1. 检查MyEsMapper中的查询方法是否存在
        • 查看MyEsMapper中的所有查询方法,确保其中包含LambdaEsQueryWrapper并实现了eq操作符。这个方法应接收一个字典(key为字段名称、value为查询条件)作为参数,并返回符合条件的结果集合。
      public List selectList(LambdaEsQueryWrapper query) {
          return myEsMapper.select(query);
      }
      
      1. 检查myEsMapper中的对应方法是否有Id参数
        • 如果MyEsMapper中的某个查询方法需要Id参数,检查对应的类定义。如果在这个类中没有实现Id方法,你需要将Id参数替换为一个默认值或设置为可选参数。例如,如果查询中有一个名为album_id的字段,并且需要一个Id值进行索引:
      public void setId(String id) {
          if (id == null || id.isEmpty()) {
              throw new IllegalArgumentException("ID cannot be empty or null");
          }
          myEsMapper.setId(id);
      }
      
      1. 更新MyEasyEsService的构造函数
        • 更新MyEasyEsService的构造函数以接受包含上述所需更改的方法和参数的ELasticSEARCH配置。修改后的构造函数示例如下:
      @Service
      public class MyEasyEsService implements EasyEsService {
      
          private final MyEsMapper myEsMapper;
      
          public MyEasyEsService(MyEsMapper esMapper) {
              this.myEsMapper = esMapper;
          }
      
          // 添加或更新查询方法
          // ...
      }
      
      1. 更新项目配置文件中的Elasticsearch配置
        • 在项目的application.yml文件中添加以下内容,以指定MyEasyEsService的相关 Elasticsearch 配置:
      # application.yml
      easy_es:
        client:
          transport:
            http:
              host: localhost
              port: 9200
            json:
              schema_version: 6
              hosts: ["localhost"]
              default_params:
                index:
                  name: yin_lin
                  number_of_shards: 1
                  replicas: 1
                  type: search
      
      • application.yml文件中设置default_params选项,它包含了 Elasticsearch 中默认的节点配置,包括index(索引名称)、number_of_shards(节点数量)、replicas(副本数)和type(类型)。
      1. 测试MyEasyEsService是否按预期工作

        • 创建一个简单的数据集(例如,一个包含YinLin文档的集合),然后使用GET /yin_lin或类似的URL发送一个查询请求。确保正确调用了MyEasyEsServiceselect方法,获取到满足查询条件的结果列表。
        MyEasyEsService myEsService = new MyEasyEsService(new MyEsMapper());
        List yinLins = myEsService.getEsYinLinX();
        
        // 列表测试
        for (YinLin yinLin : yinLins) {
            System.out.println(yinLin.getName());
        }
        
      2. 运行MyEasyEsService以验证结果

        • 将以上修改后的代码片段整合到main方法或类方法中,启动你的应用服务器(如Spring Boot 或者 Spring Cloud Eureka),然后访问指定的索引路径,查看搜索结果是否按预期工作。

      以上步骤应该可以帮助您解决整合easy-es后出现的no such method:错误,并使调用MyEasyEsService的接口返回预期结果。如果您有任何具体的问题或遇到困难,欢迎随时向我提问,我会尽力提供更详细的指导。在此过程中,如果你需要绘制图形辅助理解,你可以通过添加相应的图例和箭头表示查询和映射关系,代码实现中的状态变迁也支持使用线条和符号辅助描述。

      展开全部

      评论 编辑记录
    • GISer Liu 2024-03-30 22:15
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      根据您提供的日志信息,问题似乎出现在Easy-Es(一种 Elasticsearch 的 Java
      客户端库)的集成过程中。错误提示中提到了一个方法找不到的异常。这可能是由于库的版本问题或者是集成方式不正确导致的。
      解决思路如下:

      1. 检查版本兼容性 :确保您使用的 Easy-Es 版本与 Elasticsearch 版本兼容。可以查看 Easy-Es 的文档或者 GitHub 页面来确认版本兼容性。
      2. 检查配置 :检查您的 Easy-Es 配置,特别是与 Elasticsearch 集成的部分,确保配置正确。
      3. 查看文档 :查阅 Easy-Es 的文档,看是否有类似的问题描述或者集成示例,可以帮助您找到解决方案。
      4. 调试代码 :如果以上方法都没有解决问题,您可以尝试在代码中加入调试信息,看看具体是哪一步出了问题。比如可以在报错的地方加入日志输出,以便更好地定位问题。
        综上所述,您可以先检查版本兼容性和配置是否正确,如果问题仍然存在,可以尝试调试代码以进一步定位问题。

      如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

      用户答题指南

      评论
    • 流华追梦 Java领域新星创作者 2024-03-31 13:43
      关注

      因为Easy-Es框架的版本问题或者在模型映射类中的操作方法有问题

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    linux入门6—日志分析与故障排除
    Linux 日志系统
    深入理解 Django 模板系统
    WebRTC新增FFmpeg视频编解码模块
    Java --代理
    JVM面试87题你真的都会了吗?
    Java关键字,字面量,变量
    商城风格也可以很多变,DIY 了解一下
    HCIP中的MSTP多域配置
    C# JSON转为实体类和List,以及结合使用
  • 原文地址:https://ask.csdn.net/questions/8081603