首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr4空间故障诊断多边形

Solr4空间故障诊断多边形
EN

Stack Overflow用户
提问于 2012-11-14 08:22:28
回答 2查看 2.4K关注 0票数 3

我正在尝试对Solr4及其空间功能进行故障排除。我有一个用“geo”字段索引的文档。

在其中,我有以下几点

纬度-34.7413

经度149.7102

代码语言:javascript
复制
Stored as <geo>-34.741328,149.710238</>

我还尝试将同一文档索引为

代码语言:javascript
复制
<geo> 149.710238 -34.741328 

如果您不是分隔值的逗号(反转lat/long顺序,并在值之间放置一个空格),则建议使用该方法。

文档索引很好。

我试图给它发送一个多边形搜索。多边形是三角形的形状,如果你能想象下面的3个三角形点是顺时针顺序的。这是一个很大的三角形,目标坐标在中间的某个地方。为了进行简单的调试,我选择了一个三角形,我打算为这些搜索绘制更复杂的形状。

代码语言:javascript
复制
(-34.580136904223494, 149.6165823974609)

(-34.84203933395146, 150.0175833740234)

(-34.84654761634415, 149.4627738037109)

我已经向Solr发送了以下查询并获得了错误。

代码语言:javascript
复制
fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627))" 

我想找个三角形。

代码语言:javascript
复制
fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165))"

为了“关闭”多边形,我再次尝试添加最后一个坐标的三角形。以上两个查询不返回任何结果,只返回以下错误。

错误500无法读取:多边形( -34.5801,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165 )

我想我的问题是先去哪里看看?我已经安装了JTS库。Solr日志记录了这个。

代码语言:javascript
复制
19:11:50

SEVERE

SolrDispatchFilternull:com.spatial4j.core.exception.InvalidShapeException: Unable to read: POLYGON((-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627))

感谢任何人都能提供的指点。我认为问题要么是solr配置问题,要么是某些东西安装的不正确,或者是我发送坐标和形状的方式,或者是我缺少的其他东西。

EN

回答 2

Stack Overflow用户

发布于 2012-11-16 07:09:19

好吧,我想在这几天之后,我在大卫·斯迈利的帮助下解决了这个问题,他突然出现在互联网上,帮助我自己和其他人解决他们的Solr Spatial问题--如果我们再见面的话,我会给你倒很多啤酒--谢谢你的帮助。

您必须反转每个协同命令的lat/long (而不是long/lat),并且它起了作用。马上就来。So.Simple。

代码语言:javascript
复制
fq=geo:"Intersects(POLYGON((149.4023 -34.6072, 149.4023 -34.8690, 149.9022 -34.8690, 149.9022 -34.6072, 149.4023 -34.6072)))" 

而不是这个

代码语言:javascript
复制
fq=geo:"Intersects(POLYGON((-34.6072 149.4023, -34.8690 149.4023, -34.8690 149.9022, -34.6072 149.9022, -34.6072 149.4023)))" 

希望这条线索能帮助其他人。

当有疑问时,我试着调试它,如下所示。1.解压缩solr.war文件并将其保存为文件夹而不是文件。根据服务器的不同,有很多方法可以做到这一点。对于像我这样的业余爱好者来说,configserver,一个whm插件,是你的朋友。2.下载jts插件,解压缩它,在/lib/文件夹中有一个文件jts-1.12.jar -这是money文件。3.将其上传到solrinstall/solr.war/WEB/lib/ location --当您在其中看到许多其他.jar文件时,您知道您位于正确的位置。5.确保您的模式与solr中所述的完全相同。它在默认情况下并不存在。再检查一遍。加上这个

代码语言:javascript
复制
<fieldType name="location_rpt"   class="solr.SpatialRecursivePrefixTreeFieldType"
           spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
           distErrPct="0.025"
           maxDistErr="0.000009"
           units="degrees"
        />

并以下列方式添加字段"geo“。

代码语言:javascript
复制
<field name="geo"  type="location_rpt"  indexed="true" stored="true"  multiValued="true" />

索引你的数据。我的数据按Lat/long顺序排列,如下所示。geo:-34.741328,149.710238记住Lat=horizontal,Long=Vertical行。6.使用Lucene搜索方法测试搜索结果。有一个非常简单的矩形搜索,你可以做。找到你的目标文件GEO点,然后在左下角和右上角找到一个坐标。所有你需要的矩形是2点,你只需做一个范围搜索。对我来说就像这样。

代码语言:javascript
复制
fq=geo:[-34.8690,149.4023 TO -34.6072,149.9022]

如果这是可行的,你有基本的GEO搜索工作。

  1. 现在,让我们从这些坐标中形成一个多边形。要形成一个多边形(在这种情况下是矩形形状),我们需要5个同和弦,开始的一个,三个矩形的其他点,然后重新开始协调,以关闭形状(多边形)。无论出于什么原因,多边形搜索都使用不同的lat/long布局。你必须扭转这一局面。你把经度放在第一位。您还必须以逆时针格式构造此形状.因此,使用上面的坐标构造的点的多边形搜索看起来如下所示。 Fq=geo:相交(多边形( 149.4023 -34.6072,149.4023 -34.8690,149.9022 -34.8690,149.9022 -34.6072,149.4023-34.6072))

如您所见,lat/long是long/lat,每个长/lat由一个空格分隔,每个co-ord对由逗号分隔。

希望这条线索能帮助其他人。

票数 3
EN

Stack Overflow用户

发布于 2012-11-14 16:07:55

Fq=geo:“相交(多边形( -34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165)”

你差点就猜对了。是的,你需要关闭多边形,你在这里做了。但是,在坐标列表中遗漏了一个额外的括号:

Fq=geo:“多边形( -34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165)”

额外的括号是因为可能有多个坐标列表。第一个列表是外环,后面的列表是内部环,AKA孔。这是标准WKT。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13375200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档