Как я могу получить только внутренние поля из источника в ElasticSearch?

У меня есть структура индекса, как это:

{
          "id" : 42,
          "Person" : {
            "contracts" : [
              {
                "contractID" : "000000000000102"
              }
            ],
            "Ids" : [
              3,
              387,
              100,
              500,
              274,
              283,
              328,
              400,
              600
            ]
          },
          "dateUpdate" : "2020-12-07T13:15:00.408Z"
        }
      },
      ...
}

Мне нужен поисковый запрос, который будет извлекать только внутреннее поле «Ids» из источника и ничего более. Как я могу это сделать?

1
0
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать _source в inner_hits следующим образом:

Отображение индекса:

{
  "mappings": {
    "properties": {
      "Person": {
        "type": "nested"
      }
    }
  }
}

Поисковый запрос:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "Person",
            "query": {
              "match_all": {}
            },
            "inner_hits": {
              "_source": {
                "includes": [
                  "Person.Ids"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Результат поиска:

"inner_hits": {
          "Person": {
            "hits": {
              "total": {
                "value": 1,
                "relation": "eq"
              },
              "max_score": 1.0,
              "hits": [
                {
                  "_index": "65237264",
                  "_type": "_doc",
                  "_id": "1",
                  "_nested": {
                    "field": "Person",
                    "offset": 0
                  },
                  "_score": 1.0,
                  "_source": {
                    "Ids": [
                      3,
                      387,
                      100,
                      500,
                      274,
                      283,
                      328,
                      400,
                      600
                    ]
                  }
                }
              ]
            }
          }
        }

Вы также можете использовать вложенные inner_hits и _souce следующим образом:

{
  "query": {
    "nested": {
      "path": "Person",
      "query": {
        "match_all": {}
      },
      "inner_hits": {
        "_source" : false,
        "docvalue_fields" : [
          {
            "field": "Person.Ids",
            "format": "use_field_mapping"
          }
        ]
      }
    }
  }
}

@Abyrbalg это было давно. Надеюсь, у вас все хорошо 🙂 У вас была возможность просмотреть мой ответ, с нетерпением жду отзывов от вас 🙂

ESCoder 16.12.2020 08:49

@Abyrbalg, если мой ответ помог вам решить вашу проблему, то, пожалуйста, не забудьте проголосовать и принять ответ 🙂

ESCoder 16.12.2020 08:54

@Abyrbalg спасибо, что приняли мой ответ, не могли бы вы также проголосовать за ответ, нажав стрелку вверх рядом с ответом 🙂

ESCoder 17.12.2020 03:25

Другие вопросы по теме