使用elasticsearchTemplate.query()查询发现score字段为null

使用spring data elasticsearch遇到的问题(一)

  使用elasticsearchTemplate.query()查询发现score字段为null
  代码如下

 List<Map> maps = new ArrayList<>();
        maps =
                elasticsearchTemplate.query(
                        searchQuery,//这个自己写咯,就是一个查询语句
                        response -> {
                            SearchHits hits = response.getHits();
                            List<Map> list = new ArrayList<>();
                            Arrays.stream(hits.getHits())
                                    .forEach(
                                            h -> {
                                                System.out.println("分数为" + h.getScore());
                                                Map<String, Object> source = h.getSourceAsMap();
                                                    list.add(source);
                                                }
                                            });
                            return list;
                        });

问题为
然后就可以debug发现里面的_score分数为null,打印出来就发现score为NAN。

原因为
查询语句searchQuery里面使用了其它字段作为排序字段,es默认使用score为排序字段,如果使用其它字段作为排序字段,_score则为null

心得:
了解下了java8的stream以及如何查看拼接的es语句,收获挺多的,以及知道百度搜索可以以空格隔开关键字来进行查询。
至于报NAN的原因呢,未知,以后可能也不会遇到吧,但我还是去了解下了出现NAN是可能的原因是什么,一般出现在浮点数计算中,例如什么正无穷大,负无穷大,0/0,负数的平方根之类的,结果都是NAN。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值