来自Java的ElasticSearch索引配置以使用地理查询

时间:2019-03-26 18:07:34

标签: java spring-boot elasticsearch kibana

我想在带有配置的ElasticSearch中创建索引。我想在elasticSearch中使用地理距离查询->  https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html

我有一个Java类,正在使用ElasticSearch拥有的GeoPoint对象,该对象来自:org.elasticsearch.common.geo.GeoPoint;

@Data
@EqualsAndHashCode(callSuper = false)
public class GeofenceDocument extends AbstractBaseDocument {

    @Id

    private Double radius;
    private GeoPoint location;
    private String geofenceName;
    private Set<String> pushIds;

}

我正在完全使用我的java IndexRequest插入此类。我正在从kibana查看,并将我的位置结果显示为

      "location": {
        "properties": {
          "geohash": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "lat": {
            "type": "float"
          },
          "lon": {
            "type": "float"
          }
        }
      },

我不希望“ type”:“ keyword”,我希望“ type”:“ geo_point”,以便ElasticSearch可以在给定的经度和纬度内进行查询。

我不希望这样,因为要使用地理位置查询,我需要这样配置:

在下面的配置中,我是从kibana手动完成的

PUT myindex
{
    "mappings": {
        "_doc": {
            "properties": {
                "location": {
                "type": "geo_point"
                        }
                    }


        }
    }
}

当我这样配置时,如果我检查该索引

"mappings": {
  "_doc": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
},

所以我做到了,我手动配置它并尝试插入我的java类,这给了我错误:

[type=illegal_argument_exception, reason=[location] is defined as an object in mapping [geofence] but this name is already used for a field in other types]]]

因此类型不匹配。如果可以配置,然后将Java文档插入索引,那将是不错的选择,但我无法配置。

基本上,我想配置它以便在ES中使用地理位置查询。我不能直接插入,因为类型不会是geo_point。还是可能会有某种方法?

感谢阅读我的问题

0 个答案:

没有答案