Определение корневого отображения с неподдерживаемыми параметрами - PullRequest
0 голосов
/ 19 сентября 2019
  • версия elastisearch: 7.3.2
  • Все используемые там документы взяты из этого урока .

У меня естьимпортировал по этой ссылке файл movies_elastic.json.Когда я обратился к нему по адресу: http://localhost:9200/movies/?pretty, я получил документ JSON, для которого я даю для каждого ключа документа его тип и способ его анализа: ключевое слово, текст, long, float, date.

{
  "movies" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "fields" : {
          "properties" : {
            "actors" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "directors" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "genres" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "image_url" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "plot" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "rank" : {
              "type" : "long"
            },
            "rating" : {
              "type" : "float"
            },
            "release_date" : {
              "type" : "date"
            },
            "running_time_secs" : {
              "type" : "long"
            },
            "title" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "year" : {
              "type" : "long"
            }
          }
        },
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "type" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1568894285856",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "4tvtLNrTRuij4-a0hGBZFQ",
        "version" : {
          "created" : "7030299"
        },
        "provided_name" : "movies"
      }
    }
  }
}

Отображение текста в моей базе данных по умолчанию включает в себя ключевые слова «ключевое слово», теперь я хочу преобразовать любое поле, которое не требует необработанного анализа, который позволяет принимать данные как есть, не анализируя их.

Я попытался загрузить сопоставление для нового индекса "movies2" с помощью:

curl -XPUT -H "Content-Type: application/json" localhost:9200/movies2 -d @mapping_movies/mapping.json

Однако я получаю следующую ошибку:

JSON
error
root_cause
0
type : "mapper_parsing_exception"
reason : "Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
type : "mapper_parsing_exception"
reason : "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
caused_by
type : "mapper_parsing_exception"
reason : "Root mapping definition has unsupported parameters: [movie : {properties={id={type=text, fields={keyword={ignore_above=256, type=keyword}}}, fields={properties={actors={type=text, fields={raw={index=false, type=text}}}, plot={type=text, fields={keyword={ignore_above=256, type=keyword}}}, release_date={type=date}, year={type=long}, genres={type=text, fields={raw={index=false, type=text}}}, image_url={type=text, fields={raw={index=false, type=text}}}, directors={type=text, fields={raw={index=false, type=text}}}, rating={type=float}, rank={type=long}, title={type=text, fields={keyword={ignore_above=256, type=keyword}}}, running_time_secs={type=long}}}, type={type=text, fields={keyword={ignore_above=256, type=keyword}}}}}]"
status : 400

В приведенном ниже сопоставлении яизменил тип для актеров, режиссеров, жанров и URL.Таким образом, поля действительно текстовые (тип), но анализируются как необработанные данные (поля: {raw: {raw: {type: "keyword"}}):

{
    "mappings" : {
      "movie" : {
        "properties" : {
          "fields" : {
            "properties" : {
              "actors" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "directors" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "genres" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "image_url" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                    }
                }
              },
              "plot" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "rank" : {
                "type" : "long"
              },
              "rating" : {
                "type" : "float"
              },
              "release_date" : {
                "type" : "date"
              },
              "running_time_secs" : {
                "type" : "long"
              },
              "title" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "year" : {
                "type" : "long"
              }
            }
          },
          "id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "type" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
}

Я предполагаю, что командыЯ пробовал не обновляться для эластичного 7.3.2

Обновление

Я следовал советам Вала и сделал следующий файл сопоставления:

{
    "aliases" : { },
    "mappings" : {

        "properties" : {
          "fields" : {
            "properties" : {
              "actors" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "directors" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "genres" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                  }
                }
              },
              "image_url" : {
                "type" : "text",
                "fields" : {
                  "raw" : {
                    "type" : "text",
                    "index" : false
                    }
                }
              },
              "plot" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "rank" : {
                "type" : "long"
              },
              "rating" : {
                "type" : "float"
              },
              "release_date" : {
                "type" : "date"
              },
              "running_time_secs" : {
                "type" : "long"
              },
              "title" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "year" : {
                "type" : "long"
              }
            }
          },
          "id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "type" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }

    }
}

Однако я не былвозможность импортировать новые данные.Следующая команда

curl -XPUT -H "Content-Type: application/json" localhost:9200/_bulk --data-binary @mapping_movies/movies_elastic2.json

выдала мне следующую ошибку:

{
  "took": 44239,
  "errors": true,
  "items": [
    {
      "index": {
        "_index": "movies2",
        "_type": "movie",
        "_id": "1",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
        }
      }
    },
    {
      "index": {
        "_index": "movies2",
        "_type": "movie",
        "_id": "2",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
        }
      }
    },
    {
      "index": {
        "_index": "movies2",
        "_type": "movie",
        "_id": "3",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
        }
      }
    },
    {
      "index": {
        "_index": "movies2",
        "_type": "movie",
        "_id": "4",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
        }
      }
    },
    {
      "index": {
        "_index": "movies2",
        "_type": "movie",
        "_id": "5",
        "status": 400,
        "error": {
          "type": "illegal_argument_exception",
          "reason": "Rejecting mapping update to [movies2] as the final mapping would have more than 1 type: [_doc, movie]"
        }
      }
    },
...

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019
"Rejecting mapping update to [INDEX] as the final mapping would have more than 1 type: [_doc, TYPE]"

это обычно означает, что INDEX уже существует (с типом, например, «movie»), и ES не позволяет добавить еще один тип (например, «_doc»).Итак, просто удалите свой индекс и попробуйте снова.

0 голосов
/ 19 сентября 2019

Ваш файл сопоставления должен выглядеть следующим образом:

{
   "aliases" : { },
   "mappings" : {
      "properties" : {
         "fields" : {
            ...

Итак:

  • удалить верхний уровень movies раздел
  • удалить movie type

Также обратите внимание, что вы не можете определить отображение, используя конечную точку _bulk, вам нужно удалить индекс и воссоздать его следующим образом:

# delete the index
curl -XDELETE -H "Content-Type: application/json" localhost:9200/movies2

# recreate it
curl -XPUT -H "Content-Type: application/json" localhost:9200/movies2 --data-binary @mapping_movies/movies_elastic2.json

И вы 'хорошо идти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...