【发布时间】:2015-02-09 07:36:26
【问题描述】:
我是 ES 的新手。我正在尝试编写java程序来使用ES对MongoDB进行地理搜索(安装了河流插件等并能够使用java程序进行正常搜索)。 我在 mongodb 中有一个集合(表),其中存储了纬度和经度值。现在我想根据从 Java 程序传递的纬度和经度检索记录。
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] failed to find geo_point field [pin.location]];” 这个 pin.location 是什么?我的 mongodb 表也有“纬度”和“经度”列。但在上面的过滤器中,我有“lat(10).lon(20)”。我在这里遗漏了一些东西。 请帮我理解。任何快速帮助都非常感谢。
全栈tarce:
},"解释":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)
谢谢, 斯里
【问题讨论】:
-
在开始编写 Java 代码之前,您能否创建一个对 ES 进行相同查询的 HTTP 请求?类似:
http://url-to-es/index/document?query=...
标签: elasticsearch elasticsearch-jdbc-river