В настоящее время у меня есть индекс ниже в ElasticSearch

PUT my_index
{
  "mappings": {
    "doc": {
      "properties": {
        "type" : {
          "type": "text",
          "fielddata": true
        },
        "id" : {
          "type": "text",
          "fielddata": true
        },
        "nestedTypes": {
          "type": "nested",
          "properties": {
            "nestedTypeId":{
              "type": "integer"
            },
            "nestedType":{
              "type": "text",
              "fielddata": true
            },
            "isLead":{
              "type": "boolean"
            },
            "share":{
              "type": "float"
            },
            "amount":{
              "type": "float"
            }
          }
        }
      }
    }
  }
}

Мне нужно, чтобы вложенные типы отображались в таблице HTML вместе с полями id и type в каждой строке.

Я пытаюсь добиться чего-то похожего на раскручивание в MongoDB.

Я пробовал обратную вложенную агрегацию, как показано ниже

GET my_index/_search
{
  "size": 0,
  "aggs": {
"NestedTypes": {
  "nested": {
    "path": "nestedTypes"
  },
  "aggs": {
    "NestedType": {
      "terms": {
        "field": "nestedTypes.nestedType",
        "order": {
          "_key": "desc"
        }
      },
      "aggs": {
        "Details": {
          "reverse_nested": {}, 
          "aggs": {
            "type": {
              "terms": {
                "field": "type"
              }
            },
            "id": {
              "terms": {
                "field": "id"
              }
            }
          }
        }
      }
    }
  }
}
  }
}

Но приведенное выше возвращает только одно поле из nestedTypes, а мне нужны все они.

Кроме того, мне нужна сортировка и разбивка на страницы для этой таблицы. Не могли бы вы сообщить мне, как этого можно достичь в ElasticSearch.

0
gvk 27 Фев 2018 в 12:42

1 ответ

Лучший ответ

ElasticSearch не поддерживает эту операцию из коробки. Когда был подан запрос на реализацию того же самого в git, был дан ответ ниже:

Мы обсудили это в Fixit Friday и договорились, что не будем пытаться его реализовать, потому что мы не можем придумать способ эффективно поддерживать такие операции.

Единственные идеи, которые мы считали разумными, сводились к тому, чтобы иметь другой индекс, который хранит те же данные, но сглаженными. В зависимости от вашего варианта использования вы можете поддерживать эти два представления параллельно или поддерживать только то, которое у вас есть сегодня, а затем материализовать плоское представление данных, когда оно вам нужно, и выбросить его после завершения запроса. В обоих случаях для этого требуется логика на стороне клиента.

Ссылка на запрос находится здесь

0
gvk 26 Июл 2018 в 08:11