2017-03-17 467 views
0

我已经设置了思维狮身人面像的实时索引,它的工作非常好,并与地理主义搜索以及。但现在我想搜索多边形内的记录。使用思维狮身人面像在狮身人面像中搜索多边形

狮身人面像文档解释了它很好的Geo-distance searching

现在我想用用思维狮身人面像这一功能。 思维狮身人面像确实解释了关于geodist搜索Here 但它没有说明如何在多边形内进行搜索。

任何人都可以帮助我这么做吗?

回答

1

思维狮身人面像没有内置任何东西来为多边形搜索提供一个整洁的界面,但它当然可以使用该功能。

您会希望生成您愿意的SphinxQL SELECT子句,相应地对其进行过滤,和/或使用AttributesPane访问您的自定义属性。下面的代码是希望明确:

search = Model.search("foo", 
    :select => "*, CONTAINS(GEOPOLY2D(...), ...) AS inside", 
    :with => {:inside => true} 
); "" 
search.context[:panes] << ThinkingSphinx::Panes::AttributesPane 
search.collect { |instance| instance.sphinx_attributes["inside"] } 

; ""的第一个语句的结束IRB或Rails的控制台上运行这个时候只需要 - 你想避免在评估结果,直到一个三方通话search您已将窗格添加进来。搜索结果通常会延迟加载,但IRB呼叫inspect可以打印语句结果,从而消除懒惰优势。

窗格在a blog post I wrote中讨论,而AttributesPane类的源代码非常简单。您可能还想编写一个自定义中间件类,使用您自己的选项并将它们转换为多边形函数 - Geographer类(这就是将:geo转换为GEODIST)是一个很好的参考。

+0

谢谢帕特,我真的很感谢你为使TS成为更好的平台而付出的努力。 我已经阅读了关于中间件的博文。我仔细检查了源代码,发现没有像geodist这样的直接使用多边形的方法。因此,使用上述方法使其暂时工作。 –

+0

我也想知道如上所述的动态属性。所以我的两个查询都解决了。作为一个建议,我认为你可以提到上述方法,在思考sphinx的文档部分使用动态属性和基于多边形的搜索。 我有种阅读整个文档找到它,但无法找到它。 再次感谢您的帮助 –