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);
}
上記のコードは主に one を返すと予想されるため壊れていますがDeviceEvent
、実際には count = 10 (デフォルトのページ サイズ) のデバイス イベントを返しています。また、結果がタイムスタンプの降順で並べられていないようです。クエリのsize
andorder
部分が取得されていないかのようです。
ここで何が間違っていますか?