asticsearch: сопоставление объектов и получение данных из базы данных

Я использую эластичный поиск и оракул для базы данных.

  • База данных: я создаю представление со всеми данными, которые мне нужно проиндексировать. У меня есть 1-N отношений между моей таблицей "происшествий" и таблицей "определений", а также между таблицей "вхождений" и таблицей "мультимедиа", поэтому одно вхождение имеет несколько определений и мультимедиа.

  • Elasticsearch: я создаю отображение и реку, чтобы получить данные из представления базы данных.

проблема в том, что мне нужен массив объектов для мультимедиа и определений, а не массив для каждого поля в результате эластичного поиска (пример ниже).


отображение

curl -XPUT 'localhost:9200/botanic/' -d '{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "keylower": {
            "tokenizer": "keyword",
            "filter": "lowercase"
          }
        }
      }
    }
  },
  "mappings": {
    "specimens": {
      "_all": {
        "enabled": true
      },
      "_index": {
        "enabled": true
      },
      "_id": {
        "index": "not_analyzed",
        "store": false
      },
      "properties": {
        "_id": {
          "type": "string",
          "store": "no",
          "index": "not_analyzed"
        },
        ...
        "MULTIMEDIA": {
          "_id": {
            "path": "M_MULTIMEDIAID"
          },
          "type": "object",
          "properties": {
            "M_MULTIMEDIAID": {
              "type": "string",
              "store": "yes",
              "index": "not_analyzed"
            },
            "M_CREATOR": {
              "type": "string",
              "store": "yes",
              "index": "not_analyzed"
            },
            "M_DESCRIPTION": {
              "type": "string",
              "store": "yes",
              "index": "analyzed"
            }
            ...
          }
        },
        "DETERMINATIONS": {
          "_id": {
            "path": "D_OCCURRENCEID"
          },
          "type": "object",
          "properties": {
            "D_OCCURRENCEID": {
              "type": "string",
              "store": "yes",
              "index": "not_analyzed"
            },
            "D_DETERMINATIONID": {
              "type": "string",
              "store": "yes",
              "index": "not_analyzed"
            },
            "D_DATEIDENTIFIED": {
              "type": "string",
              "store": "yes",
              "index": "analyzed"
            },
            "D_TYPESTATUS": {
              "type": "string",
              "store": "yes",
              "index": "analyzed"
            },
            "D_CREATED": {
              "type": "date",
              "store": "yes",
              "index": "analyzed"
            }
          }
        },
        ...
        "I_INSTITUTIONID": {
          "type": "string",
          "store": "yes",
          "index": "not_analyzed"
        },
        "I_INSTITUTIONCODE": {
          "type": "string",
          "store": "yes",
          "index": "analyzed"
        }
      }
    }
  }
}'

река

curl -XPUT 'localhost:9200/_river/botanic_river/_meta' -d '{
  "type": "jdbc",
  "jdbc": {
    "index": "botanic",
    "type": "specimens",
    "url": "jdbc:oracle:thin:@localhost:1523:database",
    "user": "user",
    "password": "password",
    "sql": "select * from elasticsearchview"
  }
}'

результат, который я получаю (несколько полей и для каждого массива):

"hits": [
  {
    "_index": "botanic",
    "_type": "specimens",
    "_id": "345F5BEA7FDB4B17A7831514E25CD29B",
    "_score": 0.4430604,
    "_source": {
      ...
      "M_MULTIMEDIAID": [
        "0E91818D48DE40C785733F9F3A7932F1",
        "833C6E79D7844D568B828DF2D8BA8AC7",
        "F76F6766398042D38902DA9165D41514"
      ],
      "M_CREATOR": [
        "creator1",
        "creator2",
        "creator3"
      ],
      "M_DESCRIPTION": [
        "descr1",
        "descr3",
        "descr2"
      ],
      ...
    }
  }
]

но мне нужно что-то вроде этого (массив объектов):

"hits": [
  {
    "_index": "botanic",
    "_type": "specimens",
    "_id": "345F5BEA7FDB4B17A7831514E25CD29B",
    "_score": 0.4430604,
    "_source": {
      ...
      "MULTIMEDIA": [
        {
          "M_MULTIMEDIAID": "0E91818D48DE40C785733F9F3A7932F1",
          "M_CREATOR": "creator1",
          "M_DESCRIPTION": "descr1"
        },
        {
          "M_MULTIMEDIAID": "833C6E79D7844D568B828DF2D8BA8AC7",
          "M_CREATOR": "creator2",
          "M_DESCRIPTION": "descr2"
        },
        {
          "M_MULTIMEDIAID": "F76F6766398042D38902DA9165D41514",
          "M_CREATOR": "creator3",
          "M_DESCRIPTION": "descr3"
        }
      ]
      ...
    }
  }
]

Я старался "type" : "object" а также "type" : "nested" в отображении, но тот же результат.

как это сделать?

0 ответов

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