Цель: создать индекс Elasticsearch, предназначенный для загрузки 10 миллионов простых документов. Каждый документ - это, в основном, «Elastisearch id», «id какой-то компании» и «name». Предоставить функцию поиска типа suer.
Я мог бы успешно создать индекс и анализатор либо прямо из Postman (curl или любой другой инструмент, не зависящий от Spring Data), либо во время начальной загрузки Spring. Тем не менее, когда я пытаюсь использовать анализатор, кажется, что он игнорируется для созданного прямо из Почтальона.
Итак, мой главный вопрос: добавляет ли Springdata какой-то параметр, который мне не хватает, когда я пытаюсь прямо опубликовать сообщение json? Вторичный вопрос: есть ли способ, позволяющий Springdata печатать автоматически сгенерированные и выполняемые команды (подобный подход с Hibernate, который c позволяет видеть напечатанные команды)? Если это так, я могу визуально отладить и проверить, что отличается.
Это способ создания Index и Analyzer из Springboot / Spring-Data.
основной метод для загрузки
@EnableElasticsearchRepositories
@SpringBootApplication
public class SearchApplication {
public static void main(String[] args) {
SpringApplication.run(SearchApplication.class, args);
}
}
моя модель
@Document(indexName = "correntistas")
@Setting(settingPath = "data/es-config/elastic-setting.json")
@Getter
@Setter
public class Correntista {
@Id
private String id;
private String conta;
private String sobrenome;
@Field(type = FieldType.Text, analyzer = "autocomplete_index", searchAnalyzer = "autocomplete_search")
private String nome;
}
src / main / resources / data / es-config / elasti c -setting. json *** ЗАМЕТЬТЕ, ЧТО ЭТО ТО ТО ЖЕ НАСТРОЙКА, ИЗ КОТОРОГО Я ПОСТАВЛЯЮТСЯ POSTMAN
{
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete_search": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase"
]
},
"autocomplete_index": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
Проверяя, был ли он успешно создан, я вижу:
get http://localhost:9200/correntistas/_settings
{
"correntistas": {
"settings": {
"index": {
"number_of_shards": "5",
"provided_name": "correntistas",
"creation_date": "1586615323459",
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": "1",
"max_gram": "20"
}
},
"analyzer": {
"autocomplete_index": {
"filter": [
"lowercase",
"autocomplete_filter"
],
"type": "custom",
"tokenizer": "standard"
},
"autocomplete_search": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1",
"uuid": "xtN-NOX3RQWJjeRdyC8CVA",
"version": {
"created": "6080499"
}
}
}
}
}
Пока все хорошо.
Теперь я удаляю индекс с помощью curl -XDELETE localhost: 9200 / correntistas и я сделаем ту же идею, но сразу создадим индекс и анализатор из Почтальона:
put http://localhost: 9200 / correntistas с точно таким же анализатором, опубликованным выше:
Затем, если я проверяю настройки, я вижу точно такой же результат, как он был создан выше из Spring-Data.
Я упустили какой-то дополнительный шаг, который Spring-Data дает бесплатно и скрывая от глаз?
Подводя итог, я вижу, что при создании из Spring-данных поиск выполняется с использованием нескольких букв, но при создании из почтальона он просто извлекает данные при поиске по целому слову.
*** Благодаря такая дружелюбная и умная помощь от Npsja Elasticsearch от Opster, я могу добавить здесь дополнительный трюк, который я узнал при публикации в Postman (какой-то заголовок, включенный в моем Postman, зависал с "... Root определение отображения имеет неподдерживаемые параметры ... mapper_parsing_exception ... ", пытаясь найти решение, ответили ниже. Я думаю, это было бы полезно добавить сюда для будущих читателей.