我在ElasticSearch 7.0中使用NodeJS ElasticSearch。我在特定字段上创建了映射geo_point
类型,但没有在_mapping
中显示geo_point类型。我尝试使用filter.geo_distance
进行搜索,得到了failed to find geo point field
。
节点ElasticSearch映射
client.indices.putMapping({
index: 'listing',
type: 'detail',
body: {
properties: {
'listing_coordinates': {
"type": "geo_point"
}
}
}
}, function(err) { console.log(err) })
映射错误
[illegal_argument_exception]不能在put映射中提供类型 请求,除非include_type_name参数设置为true。
/列表/ _映射
mappings: {
properties: {
"listing_coordinates": {
"properties": {
"lat": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lon": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
}
}
节点搜索
client.search({
index: 'listing',
type: 'detail',
size: 5,
body: {
query : {
"bool": {
"filter": {
"geo_distance" : {
"distance" : "500km",
"listing_coordinates" : {
"lat" : 3.0567521,
"lon" : 101.5854671
}
}
}
}
}
}
}
搜索错误
[query_shard_exception]找不到geo_point字段 [listing_coordinates]
我在列表中有映射日期字段,效果很好。
答案 0 :(得分:1)
查看此内容:https://github.com/elastic/elasticsearch-js/issues/166 我认为您的问题应该与他的相似。请注意事件执行的顺序。另外请注意,如果您不等待PutMapping完成,那么这些索引可能会自动创建到文本字段中。
更新:
似乎您的PutMapping失败,然后通过接收数据作为默认行为将映射创建到文本字段中。
在ES7.0中,除非设置include_type_name
,否则在创建索引时不能提供类型。您的情况是输入detail
。要处理include_type_name
,请参见this。或者,您可以尝试删除type: detail
。请先尝试清除索引映射。