Подтвердить что ты не робот

Изменение настроек и сопоставлений по существующему индексу в Elasticsearch

Я хотел бы, чтобы следующие настройки и сопоставление были установлены в уже существующем индексе в Elasticsearch:

{
    "analysis": {
        "analyzer": {
            "dot-analyzer": {
                "type": "custom",
                "tokenizer": "dot-tokenizer"
            }
        },
        "tokenizer": {
            "dot-tokenizer": {
                "type": "path_hierarchy",
                "delimiter": "."
            }
        }
    }
}

{
    "doc": {
        "properties": {
            "location": {
                "type": "string",
                "index_analyzer": "dot-analyzer",
                "search_analyzer": "keyword"
            }
        }
    }
}

Я попытался добавить эти две строки кода:

client.admin().indices().prepareUpdateSettings(Index).setSettings(settings).execute().actionGet();
client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet();

Но это результат:

org.elasticsearch.index.mapper.MapperParsingException: Analyzer [dot-analyzer] not found for field [location]

Кто-нибудь? Большое спасибо,

Стине


Это работает:

if (client.admin().indices().prepareExists(Index).execute().actionGet().exists()) {            
    client.admin().indices().prepareClose(Index).execute().actionGet();
    client.admin().indices().prepareUpdateSettings(Index).setSettings(settings.string()).execute().actionGet();
    client.admin().indices().prepareOpen(Index).execute().actionGet();
    client.admin().indices().prepareDeleteMapping(Index).setType(Type).execute().actionGet();
    client.admin().indices().preparePutMapping(Index).setType(Type).setSource(mapping).execute().actionGet();
} else {
    client.admin().indices().prepareCreate(Index).addMapping(Type, mapping).setSettings(settings).execute().actionGet();
}
4b9b3361

Ответ 1

Если вы посмотрите на свои настройки после отправки изменений, вы заметите, что анализатора там нет. Фактически вы не можете изменить раздел анализа настроек в индексе live. Лучше создать его с нужными настройками, иначе вы можете просто закрыть его:

curl -XPOST localhost:9200/index_name/_close

Пока индекс закрыт, вы можете отправить новые настройки. После этого вы можете снова открыть индекс:

curl -XPOST localhost:9200/index_name/_open

Пока индекс закрыт, он не использует ресурс кластера, но не читается и не записывается. Если вы хотите закрыть и снова открыть индекс с помощью Java API, вы можете использовать следующий код:

client.admin().indices().prepareClose(indexName).execute().actionGet();
//TODO update settings
client.admin().indices().prepareOpen(indexName).execute().actionGet();