我是ES的新手。我试图编写Java程序,以针对MongoDB使用ES进行地理搜索(安装了river插件等,并能够使用Java程序进行常规搜索)。
我在mongodb中有一个集合(表),其中存储了latitide和经度值。现在我想检索从Java程序传递来的基于lat和long的记录。
FilterBuilder filter = FilterBuilders.geoDistanceFilter("pin.location").lat(10).lon(20).distance(5,DistanceUnit.KILOMETERS).geoDistance(GeoDistance.PLANE);
SearchResponse response = client.prepareSearch(INDEX)
.setTypes(TYPE)
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(matchAllQuery())
.setPostFilter(filter)
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
如果执行上述程序,则会收到“QueryParsingException [[mongoindex]未能找到geo_point字段[pin.location]];”;
这个pin.location是什么?我的mongodb表中也有“纬度”和“经度”列,但是在上面的过滤器中,我有“lat(10).lon(20)”。
请帮助我理解。任何快速的帮助,高度赞赏。
全栈停顿:
},“explain”:true}]]]];嵌套:QueryParsingException [[mongoindex]找不到geo_point字段[pin.location]]; }
在org.elasticsearch.action.search.type.TransportSearchTypeAction $ BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:233)
在org.elasticsearch.action.search.type.TransportSearchTypeAction $ BaseAsyncAction $ 1.onFailure(TransportSearchTypeAction.java:179)
在org.elasticsearch.search.action.SearchServiceTransportAction $ 12.handleException(SearchServiceTransportAction.java:351)
在org.elasticsearch.transport.netty.MessageChannelHandler.handleException(MessageChannelHandler.java:185)
在org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:175)
在org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:125)
在org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
在org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
在org.elasticsearch.common.netty.channel.DefaultChannelPipeline $ DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)处
在org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
在org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)上
在org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
在org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
在org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
在org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
在org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
在org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
在org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
在org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
在org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
在org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
在org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
在org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
在org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
在org.elasticsearch.common.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:42)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)
在java.lang.Thread.run(Thread.java:745)
谢谢,
斯里
我是一名优秀的程序员,十分优秀!