Spring Data Elasticsearch @Query中的结果顺序

时间:2018-11-15 11:49:06

标签: java spring-data-elasticsearch

这是Spring Boot数据Elasticsearch(嵌入式Elasticsearch)。

我有一个简单的查询:

{
  "query": {
    "match_phrase" : {
      "text" : "12"
    }
  }
}

当我通过localhost:9200发送此查询时,会有一个答案:

{
  "took": 56, "timed_out": false,
  "_shards": {"total": 1, "successful": 1, "failed": 0 },
  "hits": {
    "total": 5,
    "max_score": 0.3172162,
    "hits": [
     {
       "_index": "abc", "_type": "abc", "_id": "AWbzvDOghegm62vg48M5",
       "_score": 0.3172162,
       "_source": {
         "entityId": "5840", "text": "abc"
       }
     },
     {
       "_score": 0.3172162,
       "_source": {"entityId": "5838"}
     },
     {
       "_score": 0.3172162,
       "_source": {"entityId": "5834"}
     },
     {
       "_score": 0.26434684,
       "_source": {"entityId": "5850"}
     },
     {
       "_score": 0.26434684,
       "_source": {"entityId": "5846"}
     }
     ]
   }
 }

一切都很好。

在项目中,我有一个数据ElasticsearchRepository:

public interface MyESEntityRepository extends ElasticsearchRepository<MyESEntity, String> {
    @Query("same ES query")
    List<MyESEntity> find(String q);
}

这是我的问题:我打磨相同的查询并接收相同的集合,但顺序不同。

通过9200,我收到由_scoreentityId设置的下一个排序:5840 5838 5834 5850 5846。 / p>

ES数据存储库返回:5850 5846 5840 5838 5834。因此,在此示例中,看起来好像是由entityId进行的降序排列。但是,在实际查询中,情况有所不同。也许这是时间修改的顺序。

如何通过_score获取订单?


具有Pageable的相同效果:

Page<MyESEntity> find(String q, Pageable pageable);

find("12", new PageRequest(0, 10, new Sort(new Sort.Order(Sort.Direction.DESC,"_score")))).getContent();

0 个答案:

没有答案