最近在用spring-data-elasticsearch 在做距离应用时创建geo_point
类型时发现有时候会不生效(注意是有时候不生效,不知道是哪里影响的,很妖),正常情况下type 应该是geo_point,但是有时候创建出来的是一个嵌套类型,包含两个double属性的type
实体类加了注解如下
@GeoPointField
private GeoPoint shipperPoint;
创建出来的正确类型如下图:

创建出来的错误类型如下图:
不知道是什么原因导致的geo_point 类型不生效?
求大神指导?
参考http://es.xiaoleilu.com/310_Geopoints/20_Geopoints.html
地理坐标点不能被动态映射(dynamic mapping)自动检测,而是需要显式声明对应字段类型为 geo_point
先进行声明
PUT http://localhost:9200/my_index
{
"mappings": {
"my_type": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
然后实体映射就没有问题了
这是正确类型
java model 属性如何定义为geo_point, 为什么我无法引入@GeoPointField,缺包吗?
请问lz是怎么解决的?我也出现了同样的问题。原因大概找到了:entity上的索引名称indexName是死的,而我需要动态的指定。当索引建好后,那个死的索引geo_point类型是正确的,而动态指定indexName的索引property类型确实错误的double(这种情况是查找不出来结果的)。就结果来说,和你的问题是一样的,请问这个是怎么解决的?
使用索引模板功能
PUT http://IP:9200/_template/模板名_template?pretty
{
"template": "索引匹配_*",
"settings": {
"number_of_shards": 10,
"number_of_replicas": 1
},
"mappings": {
"base": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
},
"aliases": {
"别名": {}
}
}