Elasticsearch: es.index() изменяет отображение при отправке сообщения

Я пытаюсь отправить некоторые сообщения, подобные этому, в elasticsearch.

id=1
list=asd,bcv mnmn,kjkj, pop asd dgf

поэтому каждое сообщение имеет поле id, которое представляет собой строку, и поле list, содержащее список строковых значений.

когда я вставляю это в эластичный и пытаюсь создать диаграммы в кибане, анализатор по умолчанию срабатывает и разделяет мой list на пробел. Следовательно, это разрушает мои ценности. Я попытался создать сопоставление для своего индекса как

mapping='''
{ 
"test":
    { 
  "properties": {
        "DocumentID": {
          "type": "string"
        },
        "Tags":{
            "type" : "string",
          "index" : "not_analyzed"
        }
      }
    }
}'''

es = Elasticsearch([{'host': server, 'port': port}])
indexName = "testindex"    
es.indices.create(index=indexName, body=mapping)

так что это должно создать индекс с отображением, которое я определил. Теперь я просто отправляю сообщения

es.index(indexName, docType, messageBody)

но даже сейчас Кибана разрушает мои ценности! почему сопоставление не было применено?

и когда я делаю

GET /testindex/_mapping/test

я получил

{
  "testindex": {
    "mappings": {
      "test": {
        "properties": {
          "DocumentID": {
            "type": "string"
          },
          "Tags": {
            "type": "string"
          }
        }
      }
    }
  }
}

почему карта изменилась? Как я могу указать тип сопоставления, когда я делаю

es.index()

person AbtPst    schedule 01.02.2016    source источник


Ответы (2)


Вы были очень близки. Вам нужно предоставить корневой объект mappings при создании индекса, и он вам не нужен при использовании конечной точки _mapping, и именно по этой причине put_mapping сработало, а create нет. Вы можете увидеть это в api.

mapping = ''' 
{
    "mappings": {
        "test": {
            "properties": {
                "DocumentID": {
                    "type": "string"
                },
                "Tags": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}
'''

Теперь это будет работать, как ожидалось

es.indices.create(index=indexName, body=mapping)

Надеюсь это поможет

person ChintanShah25    schedule 02.02.2016
comment
Рад, что смог помочь :) - person ChintanShah25; 02.02.2016

я смог получить правильное сопоставление для работы

es.indices.create(index=indexName)
es.indices.put_mapping(docType, mapping, indexName)

я не понимаю почему

es.indices.create(index=indexName, body=mapping)

не сработало. это должно было работать в соответствии с API.

person AbtPst    schedule 01.02.2016