Spring 带排序的数据 Elasticsearch 通配符查询

Spring Data Elasticsearch wildcard query with sort

我为 elasticsearch 写了一个搜索查询:

{
"query": {
    "query_string": {
        "fields": ["studentName", "countryName"],
        "query" : "*o*"
    }
  },
"sort" : [{ 
    "studentName" : { "order": "desc" }
  }]
}

这是为 localhost:9200/myindex/mytype/_search (POST) 执行的。

我根据 query 得到了正确的结果,这些结果是根据 sort 部分排序的。但是当我将其转换为 Spring 数据查询时,如:

@Query("{ \"query\": { \"query_string\" : { \"fields\" : [\"studentName\", \"countryName\"], \"query\":\"*?0*\"}}," +
        " \"sort\" : [{ \"?1\" : { \"order\": \"?2\" }}]}")
Page<Student> freeTextSearchPortSort(String freeText, String sortBy, String sortOrder, Pageable pageable);

我总是得到相同的结果,按插入顺序排序。我需要做哪些不同的事情?

您需要创建 PageRequest,它有一个接受页面、大小、方向、属性的构造函数。 PageRequest 实现 Pageable 接口。

您的查询如下:

@Query("{ \"query\": { \"query_string\" : { \"fields\" : [\"studentName\", \"countryName\"], \"query\":\"*?0*\"}}")
Page<Student> freeTextSearchPortSort(String freeText, Pageable pageable);

调用的位置如下所示。

PageRequest pageRequest = new PageRequest(0, no_of_rec_to_be_fetched, Sort.Direction.fromString("desc"), "studentName")

freeTextSearchPortSort ("someText",pageRequest)

希望对您有所帮助!!