这是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,我收到由_score
和entityId
设置的下一个排序: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();