API-интерфейс pythonasticSearch: ошибка при использовании put_mapping - PullRequest
0 голосов
/ 12 июня 2019

Я новичок вasticsearch и хочу использовать официальный API Python. У меня есть код ниже:

from elasticsearch import Elasticsearch

es = Elasticsearch(timeout=60)
es.indices.create(index='test')

mapping={
          "mappings": {
            "user": {
              "properties": {
                "name": { "type": "text" },
                "user_name": { "type": "keyword" },
                "email": { "type": "keyword" }
              }
            },
            "tweet": {
              "properties": {
                "content": { "type": "text" },
                "user_name": { "type": "keyword" },
                "tweeted_at": { "type": "date" }
              }
            }
          }
        }
es.indices.put_mapping(index='test',body=mapping)

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

RequestError: RequestError (400, 'mapper_parsing_exception', 'Определение корневого сопоставления имеет неподдерживаемые параметры: [mappings: {tweet = {properties = {tweeted_at = {type = date}, user_name = {type = keyword}, content = {тип = текст}}}, пользователь = {свойства = {имя_пользователя = {тип = ключевое слово}, имя = {тип = текст}, электронная почта = {тип = ключевое слово}}}}]) *

Это отображение скопировано с: https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html

Может ли кто-нибудь помочь выяснить, что здесь не так?

Большое спасибо

1 Ответ

0 голосов
/ 12 июня 2019

Ошибка говорит вам, что что-то не так в используемом вами формате отображения.

Что не так?

  1. Формат недопустим для ES 7.x (API без типов: не следует указывать какой-либо тип документа в отображении)
  2. Это сопоставление определяет два типа документов, которые не поддерживаются, начиная с ES 6.0

. Если вы работаете с ES 7 (что, похоже, имеет место при рассмотрении сообщения об ошибке), вам следует использовать это сопоставление:

PUT twitter
{
  "mappings": {
    "properties": {
      "type": { "type": "keyword" }, 
      "name": { "type": "text" },
      "user_name": { "type": "keyword" },
      "email": { "type": "keyword" },
      "content": { "type": "text" },
      "tweeted_at": { "type": "date" }
    }
  }
}

Или используйте два разных индекса, один для пользователя, а другой для твита.

PUT user
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "user_name": { "type": "keyword" },
      "email": { "type": "keyword" }
    }
  }
}
PUT tweet
{
  "mappings": {
    "properties": {
      "user_name": { "type": "keyword" },
      "content": { "type": "text" },
      "tweeted_at": { "type": "date" }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...