使用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。