Elastic Search, создание индекса с источниками и настройками с помощью Rest Java Client - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь создать индекс, следуя этому руководству: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/master/java-rest-high-create-index.html#_providing_the_whole_source
Проблема в том, что этот индекс не создан должным образом. Похоже, что весь раздел settings, а также тип completion игнорируется.

Мой файл json:

{
    "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1,
        "analysis": {
            "filter": {},
            "analyzer": {
                "keyword_analyzer": {
                    "filter": [
                        "lowercase",
                        "asciifolding",
                        "trim"
                    ],
                    "char_filter": [],
                    "type": "custom",
                    "tokenizer": "keyword"
                }
            }
        }
    },
    "mappings": {
        "my_type": {
            "properties": {
                "first": {
                    "type": "text",
                    "fields": {
                        "keywordstring": {
                            "type": "text",
                            "analyzer": "keyword_analyzer"
                        },
                        "completion": {
                            "type": "completion"
                        }
                    },
                    "analyzer": "standard"
                },
                "second": {
                    "type": "text",
                    "fields": {
                        "keywordstring": {
                            "type": "text",
                            "analyzer": "keyword_analyzer"
                        },
                        "completion": {
                            "type": "completion"
                        }
                    },
                    "analyzer": "standard"
                },
                "third": {
                    "type": "text",
                    "fields": {
                        "keywordstring": {
                            "type": "text",
                            "analyzer": "keyword_analyzer"
                        },
                        "completion": {
                            "type": "completion"
                        }
                    },
                    "analyzer": "standard"
                },
                "fourth": {
                    "type": "text",
                    "fields": {
                        "keywordstring": {
                            "type": "text",
                            "analyzer": "keyword_analyzer"
                        },
                        "completion": {
                            "type": "completion"
                        }
                    },
                    "analyzer": "standard"
                }
            }
        }
    }
}  

Java-код:

CreateIndexRequest indexRequest = new CreateIndexRequest(ESClientConfiguration.INDEX_NAME);
        URL url = Resources.getResource(TERYT_INDEX_CONFIGURATION_FILE_NAME);

        return Try.of(() -> Resources.toString(url, Charsets.UTF_8))
                  .map(jsonIndexConfiguration -> indexRequest.source(jsonIndexConfiguration, XContentType.JSON))
                  .get();

createIndexRequest.setTimeout(TimeValue.timeValueMinutes(2));

        Try.of(() -> client.indices().create(createIndexRequest, RequestOptions.DEFAULT))...

Индекс создан, но когда я смотрю на метаданные индекса, он выглядит совершенно неправильно:

{
    "state": "open",
    "settings": {
        "index": {
            "creation_date": "1556379012380",
            "number_of_shards": "1",
            "number_of_replicas": "1",
            "uuid": "L5fmkrjeQ6eKmuDyZ3MP3g",
            "version": {
                "created": "7000099"
            },
            "provided_name": "my_index"
        }
    },
    "mappings": {
        "my_type": {
            "properties": {
                "first": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "ignore_above": 256,
                            "type": "keyword"
                        }
                    }
                },
                "second": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "ignore_above": 256,
                            "type": "keyword"
                        }
                    }
                },
                "third": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "ignore_above": 256,
                            "type": "keyword"
                        }
                    }
                },
                "fourth": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "ignore_above": 256,
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    },
    "aliases": [],
    "primary_terms": {
        "0": 1
    },
    "in_sync_allocations": {
        "0": [
            "Cx6tBeohR8mzbTO74dwsCw",
            "FcTUhpb_SL2LiaEyy_uwkg"
        ]
    }
}

Существует только 1 осколок без реплик, я также не вижу никакой информации о типе completion. Может кто-нибудь сказать мне, что я здесь делаю не так?

1 Ответ

1 голос
/ 27 апреля 2019

Я думаю, что эта строка:

    Try.of(() -> client.indices().create(createIndexRequest, RequestOptions.DEFAULT))...

скрывает важное исключение.Здесь вы используетеasticsearch 7.0.0, который больше не позволяет давать имя типа в вашем отображении.

Вместо

"mappings": {
    "my_type": {
        "properties": {

Вы должны написать:

"mappings": {
    "properties": {

Из-за исключения и того факта, что, вероятно, после создания индекса вы индексируете некоторые документы, применяются параметры индекса по умолчанию и сопоставление.Что объясняет то, что вы видите.

Сначала нужно исправить настройки индекса.Я бы порекомендовал сделать это в консоли разработчика Kibana.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...