我想创建(并稍后更新)索引而不知道它将包含哪些字段。现在我这样做如下:
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
为基础。我使用正确的类型向索引添加新字段,并插入新文档。在用户输入字段名称或类型之前,我不会知道它们。
问题是我无法在弹性搜索中显示正确的字段类型,这使得搜索数字类型变得非常困难。
我尝试了什么
numeric_detection
属性正在做一个糟糕的工作,所以我无法依赖它。dynamic_template
,但这需要我修改字段名称,而强烈更喜欢不这样做。org.elasticsearch.transport.Netty3Plugin
的传递依赖项冲突,我无法使用PredefinedTransportClient。有一个Put Mapping
请求可以使用此TransportClient调度,我想从另一个客户端发送。我正在使用RestHighLevel Java客户端。我目前正在尝试使用此tutorial调度put映射请求。但是我没有正确地形成请求,我的代码如下所示
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>