Как вставить данные в эластичный поиск для вложенных типов? - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в эластичном поиске. Я использую эластичный поиск с django. Я успешно создал индекс эластичного поиска,

{
"productcategories": {
    "aliases": {},
    "mappings": {
        "product_categories": {
            "properties": {
                "categoryName": {
                    "type": "text"
                },
                "subCategories": {
                    "type": "nested",
                    "properties": {
                        "partNumbers": {
                            "type": "nested"
                        },
                        "subCategoryName": {
                            "type": "text"
                        }
                    }
                }
            }
        }
    },
    "settings": {
        "index": {
            "creation_date": "1537766526678",
            "number_of_shards": "5",
            "number_of_replicas": "1",
            "uuid": "k_8XilbrTn2jM03Djp1pXQ",
            "version": {
                "created": "6040099"
            },
            "provided_name": "productcategories"
        }
    }
}
}

, и я пытаюсь вставить данные, используя формат,

data={
        "categoryName":'TestConnector',
        "subCategories": [
            {   
                'subCategoryName':'Connector1',
                'partNumbers':['HFBR-2412T','HFBR-2506AMZ']
            },
            {   
                'subCategoryName':'Connector2',
                'partNumbers':['HFBR-2422Z','HFBR-2412Z']
            }
        ]
        }

settings.ES_CLIENT.index (index = ProductCategories._meta.es_index_name, doc_type = ProductCategories._meta.es_type_name, body = data)

Это дает мне следующую ошибку,

elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'object mapping for [subCategories.partNumbers] tried to parse field [null] as object, but found a concrete value')

может кто-нибудь помочья.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Глядя на ваше отображение, вам не нужно определять partNumbers как nested, так как это будет простой массив строк.

{
  "mappings": {
    "product_categories": {
      "properties": {
        "categoryName": {
          "type": "text"
        },
        "subCategories": {
          "type": "nested",
          "properties": {
            "partNumbers": {
              "type": "text" // use "text" instead of "nested"
            },
            "subCategoryName": {
              "type": "text"
            }
          }
        }
      }
    }
  }
}

Ссылка:

0 голосов
/ 24 сентября 2018

Эта ошибка возникает из-за данных типа массива, которые вы пытаетесь проиндексировать.

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

 "partNumbers": ["HFBR-2412T", "HFBR-2506AMZ"]

Тогда ваше отображение должно быть

{
    "mappings": {
        "product_categories": {
          "properties": {
                "categoryName": {
                    "type": "text"
                },
                "subCategories": {
                    "type": "nested",
                    "properties": {
                        "subCategoryName": {
                            "type": "text"
                        }
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...