Вы установили "enabled": false
в своем отображении. Установите его на true
или, скорее, удалите его, который снова установит его на true
по умолчанию.
Цель enabled
, если она установлена на true
, состоит в том, что она позволит ES создать инвертированный индекс для полей, чтобы они были доступны для поиска. Установка false
будет означать, что ES просто пропустит чтение этих полей и их содержимого полностью.
Обратите внимание, что по умолчанию, если вы не указываете это в своем отображении, оно установлено на true
.
Ниже показано, как будет отображаться ваше отображение:
PUT <your_index_name>
{
"mappings" : {
"properties" : {
"bar" : {
"type" : "keyword"
},
"baz" : {
"type" : "long"
},
"foo" : {
"type" : "object",
"enabled" : true <---- Note this, either this or remove this to have this option
}
}
}
}
Как только вы это сделаете, вы можете просто использовать существующий запрос, чтобы получить то, что вы хотите.
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "foo.1"
}
}
]
}
}
}
Предлагаемое решение:
Насколько я понимаю, исходя из комментариев, у вас есть ids
документов как sub-fields
внутри вашего object
типа.
Почему бы не изменить отображение на что-то похожее на приведенное ниже:
POST my_sample_index
{
"mappings":{
"properties":{
"bar":{
"type":"keyword"
},
"baz":{
"type":"long"
},
"foo":{
"type":"object",
"properties":{
"id":{ <--- Field for id
"type":"keyword"
},
"value":{ <--- Corresponding field for its value
"type":"text"
}
}
}
}
}
}
Таким образом, документ будет выглядеть так:
POST my_sample_index/_doc/1
{
"baz":123,
"bar":[
"java",
"python"
],
"foo":[
{
"id":"1",
"value":"blue"
},
{
"id":2,
"value":"black"
}
]
}
Теперь вы можете просто запрашивать на основе значение поля id
с таким простым значением, как Term Query :
POST my_exists_index/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"foo.id": "1"
}
}
]
}
}
}
Теперь вы можете видеть, что количество полей в вашем отображении будет только двумя id
и value
вместо того, чтобы создавать его динамически, особенно если число документов, которое у вас могло бы быть, было бы неопределенным c.
Важное примечание: Возможно, вы также захотите проверить тип данных nested
вместо object
. Также, если вы используете nested
тип данных, вы должны использовать Nested Queries
. Пожалуйста, прочитайте вышеупомянутые ссылки о том, почему я предлагаю вам go через них.
Надеюсь, это поможет!