GEO query问题

来源:9-8 基于百度LBS的云麻点_POI数据增删改(上)

石雨洛花

2018-04-25

1. 创建index,添加mapping ;
  {
  "student": {
    "aliases": {},
    "mappings": {
      "stu_type": {
        "properties": {
          "@timestamp": {
            "type": "long"
          },
          "age": {
            "type": "integer"
          },
          "location": {
            "type": "geo_point"
          },
          "name": {
            "type": "keyword",
            "store": true
          },
          "school": {
            "type": "text"
          }
        }
      }
    },
    "settings": {
      "index": {
        "refresh_interval": "10s",
        "number_of_shards": "5",
        "provided_name": "student",
        "creation_date": "1524293244867",
        "number_of_replicas": "0",
        "uuid": "liceQ_-LQEOaLrYsS2gpHw",
        "version": {
          "created": "6020399"
        }
      }
    }
  }
}

2.  添加数据,格式如下
     {
  "_index": "student",
  "_type": "stu_type",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "school": "中南大学",
    "name": "张三丰",
    "location": "39.92211,117.22111",
    "age": 80
  }
}

3. 但是代码查询文档,实现获取中心点一定距离的文档时候报错
代码:

 public String geoFoundDoc(String index,String type,double lat,double lon,double distance){
        QueryBuilder qb = geoDistanceQuery("location")  //field
                .point(lat, lon)
                .distance(distance, DistanceUnit.KILOMETERS);
      **  SearchResponse searchResponse = client.prepareSearch(index).setTypes(type).setQuery(qb).execute().actionGet();**
        SearchHit[] hits = searchResponse.getHits().getHits();
        String docStr = "";
        for (SearchHit doc:hits){
            docStr += doc.getSourceAsString();
        }
        return docStr;
    }

写回答

2回答

瓦力老师

2018-04-26

亲,我们来捋一捋,在JAVA中,排查异常相对还是比较简单的,当异常日志抛出来,我们先看下Caused by后面的原因以及代码行号,如果这样还分析不出来,可以debug查看是具体什么字段,什么数据造成的,另外,从你的异常日志分析来看,是在转化bool值时出现了非法字符,建议先检查下数据的查询是不是正常,然后把caused by后面关键的部分以及是哪些数据造成异常的贴出来,这样我们就能看到具体原因了。

0
2
石雨洛花
还有一个问题是字符串存储坐标点,查询没问题;但是用对象存储发现es里边存储的是对象的地址值,而不是对应经纬度属性的值;代码如下: MapLocation locations = new MapLocation(); locations.setLat(116.4072154982); locations.setLon(39.9047253699); Map map = new HashMap<>(); String id = "1"; map.put("name","一号"); map.put("age",18); map.put("locations",locations); map.put("school","中南大学"); String saveDoc = clientUtil.saveDoc("student", "stu_type", id, map); 这样存储后,es显示的时对象的地址值,而不是类似: { “location”:{ "lat":"116.4072154982", "lon":"39.9047253699" } }
2018-04-26
共2条回复

石雨洛花

提问者

2018-04-25

控制台日志

ava.lang.IllegalStateException: unexpected byte [0xff]

at org.elasticsearch.common.io.stream.StreamInput.readBoolean(StreamInput.java:412) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.common.io.stream.StreamInput.readBoolean(StreamInput.java:402) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.search.builder.SearchSourceBuilder.<init>(SearchSourceBuilder.java:211) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.common.io.stream.StreamInput.readOptionalWriteable(StreamInput.java:733) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.action.search.SearchRequest.readFrom(SearchRequest.java:421) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.common.io.stream.Streamable.lambda$newWriteableReader$0(Streamable.java:51) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.transport.RequestHandlerRegistry.newRequest(RequestHandlerRegistry.java:56) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.transport.TcpTransport.handleRequest(TcpTransport.java:1508) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.transport.TcpTransport.messageReceived(TcpTransport.java:1382) ~[elasticsearch-5.6.3.jar:5.6.3]

at org.elasticsearch.transport.netty4.Netty4MessageChannelHandler.channelRead(Netty4MessageChannelHandler.java:64) ~[transport-netty4-client-5.6.3.jar:5.6.3]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) ~[netty-codec-4.1.13.Final.jar:4.1.13.Final]

at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:297) ~[netty-codec-4.1.13.Final.jar:4.1.13.Final]

at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:413) ~[netty-codec-4.1.13.Final.jar:4.1.13.Final]

at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265) ~[netty-codec-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.handler.logging.LoggingHandler.channelRead(LoggingHandler.java:241) ~[netty-handler-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1359) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:935) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:545) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:499) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) ~[netty-transport-4.1.13.Final.jar:4.1.13.Final]

at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[netty-common-4.1.13.Final.jar:4.1.13.Final]

at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_152]

 


0
0

BAT大牛亲授 基于ElasticSearch的搜房网实战

ES+MySQL+Kafka,打造强力站内搜索

898 学习 · 285 问题

查看课程