Если я правильно понимаю, вам интересно, почему ваш inner_hits
не всегда возвращает каждый блок. Идея inner_docs
, однако, именно в этом. Если в ваших вложенных блоках есть тонны block
с, и поскольку они считаются автономными вложенными документами, inner_hits
будет возвращать только те, которые соответствуют, не все из них, как в родительском, делают c.
Другими словами, если я синхронизирую c следующее, где только 1 блок содержит 'ca sh'
POST block_index/block
{"blocks":[{"text":"cash","bbox":[0,1,2,3],"page":1},{"text":"Some more text","bbox":[0,1,2,3],"page":2},{"text":"Some other text","bbox":[0,1,2,3],"page":2}],"document_issuer":12345}
, а затем ограничьте то, что я хочу видеть, используя _source
GET block_index/_search
{
"_source": ["blocks.text", "inner_hits"], <----
"query": {
"nested": {
"path": "blocks",
"query": {
"match": {
"blocks.text": "cash"
}
},
"inner_hits": {
"_source": "blocks.text" <-----
}
}
}
}
Я получу что-то вроде
{
...
"hits" : {
"total" : 1,
"max_score" : 1.2800652,
"hits" : [
{
"_index" : "block_index",
"_type" : "block",
"_id" : "0iQ9mXEBdiyDG0RsIKyn",
"_score" : 1.2800652,
"_source" : {
"blocks" : [ <----
{
"text" : "cash"
},
{
"text" : "Some more text"
},
{
"text" : "Some other text"
}
]
},
"inner_hits" : {
"blocks" : {
"hits" : {
"total" : 1,
"max_score" : 1.2800652,
"hits" : [
{
"_index" : "block_index",
"_type" : "block",
"_id" : "0iQ9mXEBdiyDG0RsIKyn",
"_nested" : {
"field" : "blocks",
"offset" : 0
},
"_score" : 1.2800652,
"_source" : {
"text" : "cash" <-----
}
}
]
}
}
}
}
]
}
}
Хотя я, возможно, захочу увидеть все мои блоки text
с, я, скорее всего, заинтересован в тот, который фактически заставил целого родителя сделать c совпадение после выполнения моего вложенного запроса.
Надеюсь, это поможет.