Я тестировал script_fields запрос, когда нашел это. когда я возвращаю params ['_ source'] из script_fields context, он не работает должным образом.
Я использую версию Elasticsearch 7.6.1 .
Когда я запускаю следующий запрос, то:
GET hockey/_search
{
"explain": true,
"query": {
"match_all": {}
},
"script_fields": {
"_source":{
"script": {
"source": """
return params['_source'];
"""
}
}
}
}
появляется следующий результат
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 12,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "6",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "7",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "8",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "39",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "10",
"_score" : 1.0,
"fields" : {
"_source" : [
{
"last" : "backlund",
"assists" : [
6,
24,
18
],
"born" : "1989/03/17",
"gp" : [
26,
82,
82
],
"first" : "mikael",
"goals" : [
3,
15,
13
]
}
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
}
]
}
}
, вы можете ясно видеть, что хотя попадет s _id отличается, но fields._source не изменяется. Фактически, возвращенный документ является одним из документов в моем указателе. Все остальные документы не отображаются.
Но когда я пытаюсь получить доступ к одному из полей документа, тогда появляются другие результаты (что совершенно нормально). Например, следующий запрос дает
GET hockey/_search
{
"explain": true,
"query": {
"match_all": {}
},
"script_fields": {
"_source":{
"script": {
"source": """
return params['_source']['first'];
"""
}
}
}
}
следующий результат
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 12,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"fields" : {
"_source" : [
"johnny"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"fields" : {
"_source" : [
"sean"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"fields" : {
"_source" : [
"jiri"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "4",
"_score" : 1.0,
"fields" : {
"_source" : [
"micheal"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "5",
"_score" : 1.0,
"fields" : {
"_source" : [
"sam"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "6",
"_score" : 1.0,
"fields" : {
"_source" : [
"dennis"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "7",
"_score" : 1.0,
"fields" : {
"_source" : [
"david"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "8",
"_score" : 1.0,
"fields" : {
"_source" : [
"tj"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "39",
"_score" : 1.0,
"fields" : {
"_source" : [
"mark"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
},
{
"_shard" : "[hockey][0]",
"_node" : "UIMgEAZNRzmIpRGyQtNk9g",
"_index" : "hockey",
"_type" : "_doc",
"_id" : "10",
"_score" : 1.0,
"fields" : {
"_source" : [
"mikael"
]
},
"_explanation" : {
"value" : 1.0,
"description" : "*:*",
"details" : [ ]
}
}
]
}
}
Здесь вы видите соответствующий _id s правильный первый имя появляется, и это не то же самое каждый раз.
Мне нужно знать, является ли это ошибкой или это сделано намеренно, потому что это создает большую путаницу среди новых пользователей Elasticsearch.
Я знаю, что можно получить _source, используя
"stored_fields": [
"_source"
],