Как добавить сопоставление в ElasticSearch с помощью JEST

Я пытаюсь создать индекс в ES с помощью специального анализатора и сопоставления, используя JEST.

Я использую следующий код:

 CreateIndex createIndex =  new CreateIndex.Builder(indexName)
    .settings(
            ImmutableSettings.builder()
                    .loadFromClasspath(
                            "jestconfiguration.json"
                    ).build().getAsMap()
    ).build();
    
    JestResult result = client.execute(createIndex);

А это jestconfiguration.java

{
  "settings": {
    "analysis": {
      "analyzer": {
        "second": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "synonym"
          ]
        }
      },
      "filter": {
        "synonym" : {
            "type" : "synonym",
            "synonyms" : [
                "smart phone => smartphone"
                ]             
                    }
                }
        }
  },
    "mappings": {
    "index_type": {
      "properties": {
        "Name": {
          "type": "string",
          "analyzer": "second"
        }
      }
    }
  }
}

Хотя индекс создается правильно с указанными настройками, раздел сопоставлений не работает, и я не могу установить сопоставление для поля Имя. У кого-нибудь есть идея?

Есть ли что-то вроде putmapping() в шутке, позволяющее добавлять сопоставления? В идеале я хотел бы иметь возможность динамически устанавливать field_name, а не в файле .json.


person panipsilos    schedule 20.04.2016    source источник


Ответы (1)


Я нашел ваш вопрос, пытаясь понять, смогу ли я создать индекс и сопоставления за один раз. В итоге я просто создал второй запрос на создание сопоставлений.

    String mappingJson = new String(ByteStreams.toByteArray(mappingFile.getInputStream()));
    boolean indexExists = client.execute(new IndicesExists.Builder(configuration.getIndex()).build()).isSucceeded();
    if (indexExists) {
        logger.info("Updating elasticsearch type mapping.");
        client.execute(new PutMapping.Builder(configuration.getIndex(), configuration.getBaseType(), mappingJson).build());
    } else {
        logger.info("Creating elasticsearch index and type mapping.");
        client.execute(new CreateIndex.Builder(configuration.getIndex()).build());
        client.execute(new PutMapping.Builder(configuration.getIndex(), configuration.getBaseType(), mappingJson).build());
    }
person Alex Pruss    schedule 12.09.2016