При использовании сценария для сортировки результатов запроса, почему Elasticsearch дает нулевое значение вместо фактического значения.
Я использую этот простой сценарий для целей тестирования.
PUT _scripts/simple_sorting
{
"script" :{
"lang": "painless",
"source": """
return Math.random();
"""
}
}
И запрос
GET some_index/_search
{
"explain": true,
"stored_fields": [
"_source"
],
"sort": {
"_script":{
"type" : "number",
"script" : {
"id": "simple_sorting"
},
"order" : "desc"
}
},
"query" : {
"bool": {
"should": [
{
"match": {
"tm_applied_for": {
"query": "bisire"
}
}
}
]
}
}
}
Запрос дает мне результат, который выглядит следующим образом.
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 20,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_shard" : "[some_index][0]",
"_node" : "UIMgEAZNRzmIpRGyQt232g",
"_index" : "some_index",
"_type" : "_doc",
"_id" : "1171229",
"_score" : null,
"_source" : {
"status" : "Registered",
"proprietor_name
.
.
.
.
"@timestamp" : "2020-03-27T20:05:25.753Z",
"tm_applied_for_anan" : "BISLERI"
},
"sort" : [
0.28768208622932434
],
Вы можете видеть, что max_score и _score значения равны нулю. Но он дает значение в массиве sort , в соответствии с которым эластичный поиск отсортировал документы.
Я хочу получить исходную оценку, которую Elasticsearch дал Query до того, как я использовал сценарий для sort, будет возвращено вместо null.
Также, когда я изменяю скрипт simple_sorting следующим образом. Я получаю некоторое значение в массиве sort (скажем, 0.234 ... ), которое не равно тому, что было возвращено ранее (скажем, 12.1234 ... ), когда я не использовал сценарий для сортировки.
PUT _scripts/simple_sorting
{
"script" :{
"lang": "painless",
"source": """
return _score;
"""
}
}
Почему значение _score не совпадает одновременно?
Когда Elasticsearch Документация явно говорит, что я могу получить доступ к _score при использовании сценария для сортировки.
То, что я ожидаю, когда я использую сценарий для сортировки, таково.
1) max_score и _score , чтобы остаться в том виде, как оно было задано Elasticsearch вместо того, чтобы стать нулевым.
2) Сортировка произойдет на основание Math.random () значение.