自定义插件用于排序,在调用lookup.source()时NullPointerException异常
Elasticsearch | 作者 CeaserWang | 发布于2020年01月02日 | 阅读数:1630
我写了一个插件用于排序,在调用获取文档调用lookup.source()的时候发生npe,主要逻辑代码:
@Override
public double runAsDouble() {
return PriceSupport.mainProcess(leafLookup, params);
}
PriceSupport.mainProcess方法的逻辑:
public static Double mainProcess(LeafSearchLookup lookup, Map<String, Object> params) {
ArrayList skuProductProperties = (ArrayList) lokup.source().get("skuProductProperties");
略
}
在调用 lookup.source().get("skuProductProperties")的时候异常,异常的代码行是get方法里边的loadSourceIfNeeded方法的【 reader.document(docId, sourceFieldVisitor);】出现空指针
补充,只有在排序的时候才会出现空指针。如下的形式不会有npe:
searchSourceBuilder.scriptField("estimatedPrice", buildComputePriceScript(searchParamDTO, 2)); searchSourceBuilder.scriptField("actPrice", buildComputePriceScript(searchParamDTO, 3));
只有在使用ScriptSortBuilder的时候才会有npe。
@Override
public double runAsDouble() {
return PriceSupport.mainProcess(leafLookup, params);
}
PriceSupport.mainProcess方法的逻辑:
public static Double mainProcess(LeafSearchLookup lookup, Map<String, Object> params) {
ArrayList skuProductProperties = (ArrayList) lokup.source().get("skuProductProperties");
略
}
在调用 lookup.source().get("skuProductProperties")的时候异常,异常的代码行是get方法里边的loadSourceIfNeeded方法的【 reader.document(docId, sourceFieldVisitor);】出现空指针
补充,只有在排序的时候才会出现空指针。如下的形式不会有npe:
searchSourceBuilder.scriptField("estimatedPrice", buildComputePriceScript(searchParamDTO, 2)); searchSourceBuilder.scriptField("actPrice", buildComputePriceScript(searchParamDTO, 3));
只有在使用ScriptSortBuilder的时候才会有npe。
2 个回复
CeaserWang
赞同来自:
Charele - Cisco4321
赞同来自:
又看了下,才发现你用的是5.x,算了吧呵呵。