получение [ОШИБКА] 'Свойство [dims] должно быть указано для поля [вектор].' несмотря на то, что установлено в картографии - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь загрузить плотные векторы в конечную точку Elasticsearch.

  1. создан индекс с отображением, как показано ниже:
        mapping = {
        "mappings": {
            "properties" : {
                "vector": {
                    "type": "dense_vector",
                    "dims": 300  
                    },
                "word" : {
                    "type" : "text"
                    }
                }
            }
        }  

        es.indices.create(
        index="test",
        body=mapping
    ) 

полученный ответ:

{'acknowledged': True, 'shards_acknowledged': True, 'index': 'test'}
создал функцию для загрузки вектора с использованием массового API, как показано ниже: Модель - это словарь python со словом в качестве ключа и связанным вектором в качестве значения.
def gendata(model):
  for key, value in model.items():
    key = str(key)
    yield {
        "_index": "test",
        "_id": key,
        "_type": "document",
        "word": key,
        "vector": value
    }

, получая ошибку ниже при вызове функции gendata () с помощью helpers.bulk ()

ПРИМЕЧАНИЕ. В отображении задаются значения dim, поэтому для ошибки необходимо указывать dim.

BulkIndexError: ('100 document(s) failed to index.', [{'index': {'_index': 'test', '_type': 'document', '_id': 'the', 'status': 400, 'error': {'type': 'mapper_parsing_exception', 'reason': 'The [dims] property must be specified for field [vector].'}, 'data': {'word': 'the', 'vector': [0.04656, 0.21318, -0.0074364, -0.45854, -0.035639, 0.23643, -0.28836, 0.21521, -0.13486, -1.6413, -0.26091, 0.032434, 0.056621, -0.043296, -0.021672, 0.22476, -0.075129, -0.067018, -0.14247, 0.038825, -0.18951, 0.29977, 0.39305, 0.17887, -0.17343, -0.21178, 0.23617, -0.063681, -0.42318, -0.11661, 0.093754, 0.17296, -0.33073, 0.49112, -0.68995, -0.092462, 0.24742, -0.17991, 0.097908, 0.083118, 0.15299, -0.27276, -0.038934, 0.54453, 0.53737, 0.29105, -0.0073514, 0.04788, -0.4076, -0.026759, 0.17919, 0.010977,

1 Ответ

1 голос
/ 21 апреля 2020

Elasticsearch не читает вашу конфигурацию сопоставления во время запроса, потому что вы используете ES 7.x, который больше не поддерживает doc_type -do c здесь - но вы указываете этот параметр в bulk запросе. Согласно переменной mapping при создании индекса вы не указываете свой doc_type, но при выполнении массового запроса вы выполняли его с несуществующим doc_type - document.

Поэтому, пожалуйста, измените:

def gendata(model):
  for key, value in model.items():
    key = str(key)
    yield {
        "_index": "test",
        "_id": key,
        "_type": "document",
        "word": key,
        "vector": value
    }

в:

def gendata(model):
  for key, value in model.items():
    key = str(key)
    yield {
        "_index": "test",
        "_id": key,
        "word": key,
        "vector": value
    }
...