Позвольте мне сначала объяснить мой сценарий. Я извлекаю данные из РСУБД и вставляю их в ElasticSearch. Извлечена Результаты представлены в виде списка, и я готовлю запрос насыпной указательный так:Поля ElasticSearch Сопоставление по строкам по умолчанию при индексировании
BulkRequestBuilder bulkRequest = client.prepareBulk();
for (Map<String,Object> singleDataRow : ResultSet)
{
IndexRequest indexRequest = new IndexRequest("testindex","testtype",singleDataRow.getObject("NAME"));
bulkRequest.add(indexRequest);
}
bulkRequest.execute().actionGet();
Моя карта = включает карту строки в строку, строку в большой десятичной, строку большого целого и т.д. например.
{ BIRTHDATE : 2015-03-05 , NAME : deepankar , AGE : 22 , AMOUNT : 15.5 }
Но когда я вижу отображение моего TestType в testindex, все отображения полей имеют «типа»: «строка»
Почему полей не карты для «типа»: «строка» , или «type»: «long» и даже «type»: «date» как elasticsearch делает это по умолчанию?
большое спасибо за ответ. На самом деле я сделал вывод singleDataRow (MAP) перед вызовом 'code' indexRequest (singleDataRow); 'code' вот так: ' code' System.out.println (singleDataRow.get ("AGE"). getClass()); 'code' Его возвращение: java.math.BigDecimal –
Возможно ли, что первый документ, который вы вставили в свой индекс, использовал строки, а не целые числа/поплавки? В любом случае удалите индекс, создайте и используйте API сопоставления для установки типов полей, а затем вставьте свои документы. –
У меня нет никакого указателя. Я выполнил 'DELETE _all', используя смысл, и запустил свой код java, и когда я' GET testindex/_mapping': все поля имеют строку как свой тип! –