Spring中带有@Query的ElasticSearch

我已经使用ElasticSearch的_plugin / head接口成功创建了查询。该查询旨在返回特定位置的特定设备的最新时间戳。该查询如下所示:

{  

"query":{

"bool":{

"must":[

{

"term":{

"deviceevent.location.id":"1"

}

},

{

"term":{

"deviceevent.deviceId":"AHE1LDD01"

}

}

]

}

},

"from":0,

"size":1,

"sort":{

"timestamp":{

"order":"desc"

}

}

}

上面的查询按预期工作。现在使用Spring-Boot和Spring-Data-

ElasticSearch,我定义了自己的ElasticSearchRepository外观,如下所示:

package com.repository.elasticsearch;

import org.springframework.data.domain.Page;

import org.springframework.data.domain.Pageable;

import org.springframework.data.elasticsearch.annotations.Query;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import com.domain.DeviceEvent;

public interface DeviceEventRepository extends ElasticsearchRepository<DeviceEvent, String>

{

@Query("{\"bool\":{\"must\":[{\"term\":{\"deviceevent.location.id\": \"?0\"}},{\"term\":{\"deviceevent.deviceId\": \"?1\"}}]}},\"from\": 0,\"size\": 1,\"sort\":{\"timestamp\":{\"order\":\"desc\"}}")

DeviceEvent findLatestCheckInAtLocation(Long locationId, String deviceId);

}

上面的代码之所以中断,主要是因为我希望它返回一个DeviceEvent,但实际上它返回的是一个count =

10(默认页面大小)的设备事件。似乎结果也没有按时间戳降序排列。好像查询的sizeorder部分没有被拾取。

我在这里做错了什么?

回答:

而不是在查询注释中控制结果大小。

使用Pageable界面,以下内容取自文档。

public interface BookRepository extends ElasticsearchRepository<Book, String> {

@Query("{"bool" : {"must" : {"field" : {"name" : "?0"}}}}")

Page<Book> findByName(String name,Pageable pageable);

}

这将使您能够:

findByName("foo-name", new PageRequest(0,1));

如果您还想排序:

findByName("foo-name", new PageRequest(0,1, new Sort(new Sort.Order(Sort.Direction.ASC,"name")))).getContent().get(0);

以上是 Spring中带有@Query的ElasticSearch 的全部内容, 来源链接: utcz.com/qa/435204.html

回到顶部