我想在不知道它将包含哪些字段的情况下创建(并稍后更新)一个索引。现在我这样做如下:
curl -XPUT 'localhost:9200/myIndexName?pretty' -H 'Content-Type: application/json' -d'
{
"settings" : {
"index" : {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
},
"mappings" : {
"myIndexName" : {
"dynamic" : true,
"numeric_detection": true,
"properties" : {}
}
}
}
'
这很好用。
现在,故事如下。很多人会来到一个网页并输入信息,有些人会text
基于,有些人会double
基于。我使用正确的类型将新字段添加到索引中,并插入它们的新文档。在用户输入之前,我不会知道字段名称或类型。
问题是我无法在 Elastic Search 中显示正确的字段类型,这使得搜索数字类型变得非常困难。
我试过的
- 该
numeric_detection
物业的工作很糟糕,所以我无法依赖它。 - 我可以使用 a
dynamic_template
,但这需要我修改字段名称,我强烈不希望这样做。 - 我无法使用 PredefinedTransportClient 因为与
org.elasticsearch.transport.Netty3Plugin
. 有一个Put Mapping
可以用这个 TransportClient 分派的请求,我想从另一个客户端分派。 我正在使用 RestHighLevel Java 客户端。我目前正在尝试使用本教程发送一个放置映射请求。但我没有正确形成请求,我的代码如下所示
final Map<String, Object> properties = new HashMap<>(); for (String key : esHeaderTypes.keySet()) { final Map<String, String> typeMap = new HashMap<String, String>() { { put("type", esHeaderTypes.get(key).name()); } }; properties.put(key, typeMap); } final Map<String, Object> propertiesMap = new HashMap<>(); propertiesMap.put("properties", properties); HttpEntity entity = new NStringEntity(OBJECT_MAPPER.writeValueAsString(propertiesMap), ContentType.APPLICATION_JSON); Response response = restHighLevelClient .getLowLevelClient() .performRequest("PUT", index, Collections.emptyMap(), entity); LOGGER.debug("putMapping Response: ", response);
但这会引发异常,稍后我会在能够再次找到它时发布。
您能提供的任何建议将不胜感激。cURL
如果没有一点额外的帮助 ,我将无法使用类似命令的代码。
我在用
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.2.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.2.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.2</version>
</dependency>