При запросе Elasticsearch из Spring-Data я хотел бы получить _score
Если мы возьмем простой следующий класс:
@Document(indexName = "test", type = "el_test")
public static class ElTest{
private long id;
private String myField;
}
С тестом JUnit
@Test
public void testScore() throws Exception {
elasticsearchTemplate.index(new IndexQueryBuilder()
.withIndexName("test")
.withObject(new ElTest("first value"))
.build());
elasticsearchTemplate.index(new IndexQueryBuilder()
.withIndexName("test")
.withObject(new ElTest("second value"))
.build());
elasticsearchTemplate.index(new IndexQueryBuilder()
.withIndexName("test")
.withObject(new ElTest("third"))
.build());
SearchQuery query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("myField","second value"))
.build();
List<ElTest> els = elasticsearchTemplate.queryForList(query, ElTest.class);
assertEquals(2, els.size());
}
Это создаст 3 записи в Elasticsearch. Запрос извлечет два значения с разными оценками.
Если мы поместим запрос прямо в Elasticsearch:
POST /test/_search
{
"query": {
"match" : {
"myField" : {
"query" : "second value",
"type" : "boolean"
}
}
}
}
И ответ от Elasticsearch:
{
"took": 15,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.8838835,
"hits": [
{
"_index": "test",
"_type": "el_test",
"_id": "AVKmmYCL3xnXT_BGRA3T",
"_score": 0.8838835,
"_source": {
"id": 0,
"myField": "second value"
}
},
{
"_index": "test",
"_type": "el_test",
"_id": "AVKmmYCI3xnXT_BGRA3S",
"_score": 0.028130025,
"_source": {
"id": 0,
"myField": "first value"
}
}
]
}
}
Получив список объектов ElTest, я не могу получить значение _score (0,8838835 и 0,028130025). Есть ли способ получить значение в Spring-данных?
Я бы представил что-то вроде
@Document(indexName = "test", type = "el_test")
public static class ElTest{
private long id;
private String myField;
@Score
private double score;
}
Где Score будет аннотацией, указывающей, что поле заполнено Elasticsearch.
Причина, по которой мне нужен счет, состоит в том, чтобы отсортировать список в графическом интерфейсе.
Из-за множества сопоставлений dto от Elasticsearch до графического интерфейса список в каком-то месте становится несортированным. Поэтому он не надежен.
Я мог бы, конечно, добавить значение оценки вручную, но это потребовало бы перебора списка. Что не очень приятно.
Я использую Spring-data-elasticsearch версии 1.2.0 и, следовательно, Elasticsearch 1.4.4.