Для целей автозаполнения хочу применить Suggest API (конфигурировал исходя из статьи).
Сейчас встал вопрос, как это дело подружить с загрузкой данных Sparkом.
Код загрузки элементарен:
JavaRDD<Map<String, Object>> resultRdd = inputRdd.map(line -> {
if (line.trim().isEmpty()) {
return null;
}
String arr = line.split("\t");
ObjectMapper mapper = new ObjectMapper();
@SuppressWarnings("unchecked")
Map<String, Object> map = mapper.readValue(arr[1], Map.class);
map.put(esMappingId, arr[0]);
return map;
}).filter(x -> x != null);
Проблема в том, что я не пойму, как можно передать данные (пробую на примере простого числового айди) в поле с suggest типом.
Если просто добавляю в мапу map.put("SUGGEST_ID", arr[0]); , маппинг у индекса меняется (создается отдельный тип и ко всему содержимому добавляется обычное поле SUGGEST_ID).
Если добавляю SUGGEST_ID в виде мапы с input-полем и айди внутри (
Map<String, String> map2 = new HashMap<>();
map2.put("input", arr[0]);
map.put("SUGGEST_ID", map2);
)
происходит тоже самое - создается новый тип.
Создаю индекс в таком виде:
{
"test_2": {
"aliases": {},
"mappings": {
"doc": {
"properties": {
"ID": {
"type": "string"
},
"suggest_ID": {
"search_analyzer": "simple",
"type": "completion",
"payloads": "false",
"analyzer": "simple"
},
"test-id": {
"type": "string"
}
}
}
},
"settings": {
"index": {
"number_of_shards": "5",
"number_of_replicas": "1"
}
},
"warmers": {}
}
}
а после спарка имею что то следующее:
{
"test_2": {
"aliases": {},
"mappings": {
"doc": {
"properties": {
"ID": {
"type": "string"
},
"suggest_ID": {
"properties": {
"completion": {
"properties": {
"field": {
"type": "string"
},
"size": {
"type": "long"
}
}
},
"input": {
"type": "string"
},
"text": {
"type": "string"
}
}
}
}
}
},
"settings": {
"index": {
"test_2": {
"settings": {
"index": {
"number_of_shards": "5",
"number_of_replicas": "1"
}
},
"mappings": {
"doc": {
"properties": {
"suggest_ID": {
"search_analyzer": "simple",
"type": "completion",
"payloads": "false",
"analyzer": "simple"
} ,
"ID": {
"type": "string"
}
}
}
}
},
"creation_date": "1465489137103",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "zD-HR3pgRsK0Mvyj4IIuuA",
"version": {
"created": "2030299"
}
}
},
"warmers": {}
}
}
Вопрос - как можно загрузить данные также и в suggest-поле?
Или же оставить эту затею и воспользоваться советом того же товарища из ответа