繁体   English   中英

弹性搜索排序结果未显示在SearchResponse中

[英]Elastic search sort result not showing in SearchResponse

我想获取sequenceStatus为“ OB ORDER COMPLETE”的最后一条记录,因此我使用matchQuery并对时间戳按DESC顺序进行排序。 然后我返回第一个结果。
打印前10个结果后,我发现第一个结果不是我期望的最后一个记录。 这是第一记录。 我如何获得最近的记录? 这是代码:

String[] includeFields = new String[] {"eventTimestamp"};
String[] excludeFields = new String[] {"logEvent","testId","orderId","marketId"};
searchSourceBuilder.query(QueryBuilders.matchQuery("sequenceStatus", "OB ORDER COMPLETE")).sort("eventTimestamp", SortOrder.DESC).fetchSource(includeFields,excludeFields);
searchSourceBuilder.size(20);
searchReq.source(searchSourceBuilder);
try {
SearchResponse searchResp=client.search(searchReq);
SearchHit[] results = searchResp.getHits().getHits();
queryResultPrint(results);
String eventTimestamp= searchResp.getHits().getAt(0).getSourceAsMap().get("eventTimestamp").toString();
return eventTimestamp;
} catch (IOException e) {
      e.printStackTrace();
  }

结果:

{“ eventTimestamp”:“ 2018-05-14 19:52:22.221184000”}

{“ eventTimestamp”:“ 2018-05-14 19:52:22.221645000”}

{“ eventTimestamp”:“ 2018-05-14 19:52:22.222064000”}

{“ eventTimestamp”:“ 2018-05-14 19:52:22.222445000”}

{“ eventTimestamp”:“ 2018-05-14 19:52:22.222880000”} ......

注意:queryResultPrint(results)是用于打印searchResponse的代码。

我认为您缺少searchSourceBuildersearchReq之间的关系。 至少在您发布的代码片段中看不到。

从我的角度来看,在获得响应之前,您应该有另一行代码:

searchSourceBuilder.query(QueryBuilders.matchQuery("sequenceStatus", "OB ORDER COMPLETE")).sort("eventTimestamp", SortOrder.DESC).fetchSource(includeFields,excludeFields);
/* binding source searchSourceBuilder to searchReq */
searchReq.source(searchSourceBuilder);
/* */
SearchResponse searchResp=client.search(searchReq);

如我所说,我是ES新手,可能会错

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM