映射Geopoint在ElasticSearch中不起作用

时间:2019-04-27 03:16:35

标签: node.js elasticsearch geopoints

我在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]

我在列表中有映射日期字段,效果很好。

1 个答案:

答案 0 :(得分:1)

查看此内容:https://github.com/elastic/elasticsearch-js/issues/166 我认为您的问题应该与他的相似。请注意事件执行的顺序。另外请注意,如果您不等待PutMapping完成,那么这些索引可能会自动创建到文本字段中。

更新

似乎您的PutMapping失败,然后通过接收数据作为默认行为将映射创建到文本字段中。

在ES7.0中,除非设置include_type_name,否则在创建索引时不能提供类型。您的情况是输入detail。要处理include_type_name,请参见this。或者,您可以尝试删除type: detail。请先尝试清除索引映射。

参考: https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html#removal-of-types