映射地理点在 ElasticSearch 中不起作用
Mapping geopoint doesn't work in ElasticSearch
我正在使用 NodeJS ElasticSearch 和 ElasticSearch 7.0。我在特定字段上创建映射 geo_point
类型,但它不显示 _mapping
中的 geo_point 类型。我尝试使用 filter.geo_distance
进行搜索,我得到了 failed to find geo point field
。
节点弹性搜索映射
client.indices.putMapping({
index: 'listing',
type: 'detail',
body: {
properties: {
'listing_coordinates': {
"type": "geo_point"
}
}
}
}, function(err) { console.log(err) })
映射错误
[illegal_argument_exception] Types cannot be provided in put mapping
requests, unless the include_type_name parameter is set to true.
/listing/_mapping
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] failed to find geo_point field
[listing_coordinates]
我的列表中有映射日期字段,效果很好。
看到这个:https://github.com/elastic/elasticsearch-js/issues/166
我想你的问题应该和他的差不多。请注意事件执行的顺序。另请注意,如果您没有等待 PutMapping 完成,那么这些索引可能会自动创建到文本字段中。
更新:
您的 PutMapping 似乎失败了,然后您的映射是通过接收数据作为默认行为创建到文本字段中的。
在ES7.0中,除非设置include_type_name
,否则在创建索引时不能提供类型。在您的例子中,类型是 detail
。要处理 include_type_name
,请参阅 this。或者您可以尝试在您的情况下删除 type: detail
。请在尝试之前尝试清除您的索引映射。
我正在使用 NodeJS ElasticSearch 和 ElasticSearch 7.0。我在特定字段上创建映射 geo_point
类型,但它不显示 _mapping
中的 geo_point 类型。我尝试使用 filter.geo_distance
进行搜索,我得到了 failed to find geo point field
。
节点弹性搜索映射
client.indices.putMapping({
index: 'listing',
type: 'detail',
body: {
properties: {
'listing_coordinates': {
"type": "geo_point"
}
}
}
}, function(err) { console.log(err) })
映射错误
[illegal_argument_exception] Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to true.
/listing/_mapping
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] failed to find geo_point field [listing_coordinates]
我的列表中有映射日期字段,效果很好。
看到这个:https://github.com/elastic/elasticsearch-js/issues/166 我想你的问题应该和他的差不多。请注意事件执行的顺序。另请注意,如果您没有等待 PutMapping 完成,那么这些索引可能会自动创建到文本字段中。
更新:
您的 PutMapping 似乎失败了,然后您的映射是通过接收数据作为默认行为创建到文本字段中的。
在ES7.0中,除非设置include_type_name
,否则在创建索引时不能提供类型。在您的例子中,类型是 detail
。要处理 include_type_name
,请参阅 this。或者您可以尝试在您的情况下删除 type: detail
。请在尝试之前尝试清除您的索引映射。