Должно быть что-то не так с вашим отображением, которым вы не поделились с нами.
Вот мои шаги репликации:
Индекс инициализации с вложенным отображением:
PUT /source-string
{
"mappings": {
"dynamic": true,
"properties": {
"targetStrings": {
"type": "nested",
"properties": {
"text": {
"type": "text"
}
}
},
"text": {
"type": "text"
}
}
}
}
Индексировать образец объекта:
POST source-string/_doc
{
"text": "foo",
"targetStrings": [
{
"text": "bar"
},
{
"text": "lorem ipsum"
},
{
"text": "NOTAMATCH"
}
]
}
Запросить ваш text
и вложенный targetStrings.text
:
GET source-string/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"text": "NOTAMATCH"
}
},
{
"nested": {
"path": "targetStrings",
"query": {
"bool": {
"must": [
{
"match": {
"targetStrings.text": "NOTAMATCH"
}
}
]
}
}
}
}
]
}
}
}
, который дает ровно 1 попадание.
К вашему сведению в конце раздела filter
в вашем запросе было слишком много запятых:
"filter":[
{"term":{"pid":"dh9lc4ZLdmZgtYNY0Q9O"}},
{"term":{"sourceType":"glossary"}}, <--------
],
Изменить после редактирования вопроса
Переместить bool-should
внутри фильтра, чтобы заставить ваше предложение «ИЛИ» внутри «И»:
GET test-string/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"pid": "someId"
}
},
{
"bool": {
"should": [
{
"match": {
"text": "lorem"
}
},
{
"nested": {
"path": "targetStrings",
"query": {
"bool": {
"must": [
{
"match": {
"targetStrings.text": "foobar"
}
}
]
}
}
}
}
]
}
}
]
}
}
}