首先让我解释一下我的情景。 我从RDBMS获取数据并将其推送到ElasticSearch。 获取的结果以List的形式出现,我正在准备批量索引请求,如下所示:
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();
My Map =包括字符串到字符串的映射,字符串到大小数,字符串到大整数等。 例如。
{ BIRTHDATE : 2015-03-05 , NAME : deepankar , AGE : 22 , AMOUNT : 15.5 }
但是当我在testindex中看到我的testtype的映射时,所有字段的映射都是&#34; type&#34; :&#34; string&#34;
为什么字段不映射到&#34;键入&#34;:&#34;字符串&#34; ,或&#34;键入&#34; :&#34;长&#34; ,甚至&#34;键入&#34; :&#34; date&#34;正如elasticsearch默认做的那样吗?
答案 0 :(得分:2)
Elasticsearch将尝试通过第一次插入来“猜测”字段类型,除非您事先创建并映射字段。
将您的字段编入索引为string
而非long
或任何其他类型的原因有两种可能原因:
您实际上并未将这些字段作为int
发送,因此您要发送'10'
而不是10
您已经插入了至少1个该字段值string
的文档,因此如果您使用AGE: '22'
插入了第一个文档,Elasticsearch会将该字段设置为{ {1}}以及任何将来的插入都会有type: string
值。
如果你想确定,你可以删除当前索引,重新创建它并在插入第一个文档之前手动设置映射,如下所示:
string