我已经设置了思科sphinx用于实时索引,并且它工作得非常好并且也使用geodist进行搜索。但是现在我想在多边形内搜索记录。
Sphinx文档在Geo-distance searching
解释得非常好现在我想使用思考sphinx来使用这个功能。 思考sphinx确实解释了 geodist 搜索Here 但它没有说明如何在多边形内搜索。
任何人都可以帮我这么做吗?
答案 0 :(得分:1)
思考Sphinx没有内置任何东西来为多边形搜索提供一个简洁的界面,但它当然可以使用这个功能。
您需要生成您想要的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
)是一个好的参考。