ElasticSearch字段在索引时默认映射到String

时间:2015-06-22 09:16:49

标签: elasticsearch

首先让我解释一下我的情景。 我从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默认做的那样吗?

1 个答案:

答案 0 :(得分:2)

Elasticsearch将尝试通过第一次插入来“猜测”字段类型,除非您事先创建并映射字段。

将您的字段编入索引为string而非long或任何其他类型的原因有两种可能原因:

  1. 您实际上并未将这些字段作为int发送,因此您要发送'10'而不是10

  2. 您已经插入了至少1个该字段值string的文档,因此如果您使用AGE: '22'插入了第一个文档,Elasticsearch会将该字段设置为{ {1}}以及任何将来的插入都会有type: string值。

  3. 如果你想确定,你可以删除当前索引,重新创建它并在插入第一个文档之前手动设置映射,如下所示:

    string